addEventListener с именованной функцией и параметрами

1

Я знаю, что есть много похожих вопросов, но почему-то я ничего не нашел для этой проблемы - можете ли вы указать мне в правильном направлении

Пусть говорят, что у нас есть функция

window.logMeThis = function(msg){
    console.log(msg);
}

то мне нужно добавить прослушиватель событий

window.addEventListener('keypress', window.logMeThis.bind(null, "something"));

который сначала выглядит хорошо - но.bind создает новый fn

и теперь я не могу удалить слушателя

window.removeEventListener('keypress', window.logMeThis);
  • 0
    нет другого волшебного пути. Вы либо сохраняете ссылку на новую «связанную» версию, либо не можете отсоединить слушателя.
Показать ещё 3 комментария
Теги:

3 ответа

2
Лучший ответ

Вы можете сделать это:

window.logMeThis = function(msg){
    console.log(msg);
}
var myFunc = window.logMeThis.bind(null, "something");
window.addEventListener('keypress', myFunc);

Чтобы удалить слушателя, просто выполните следующее:

window.removeEventListener('keypress', myFunc);

В принципе, вам нужно иметь ссылку на свою функцию, чтобы удалить ее.

  • 0
    Да, здесь работает
0

Ты прав:

Этот метод создает функцию, тело которой аналогично функции, на которую она вызывается

просто передайте существующую функцию, и вы сможете ссылаться на нее так:

var i = 0;
    window.logMeThis = function(msg){
        console.log(msg+''+i);

      i++;
    }
    window.addEventListener('keypress', window.logMeThis, false);
    window.removeEventListener('keypress', window.logMeThis, false);
  • 0
    Я боюсь этого: window.logMeThis ('привет') вызывает функцию - один раз
  • 0
    Вы правы - нужно передать функцию вместо ее выполнения.
0

Если вам нужно привязать функцию к определенному контексту, вы можете сделать это:

var boundFunction = window.logMeThis.bind(null, "something");
window.addEventListener('keypress', boundFunction);

Теперь у вас есть ссылка на функцию, чтобы удалить ее.

  • 0
    а что если мне не нужно использовать привязку?
  • 0
    тогда это: window.addEventListener ('нажатие клавиши', window.logMeThis);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню