removeListener не работает даже при использовании именованных функций - PullRequest
0 голосов
/ 09 июля 2020

Это мой код

    const keyUpEvent = (e, someString) => {
        if(e.keyCode === 13){
            console.log(someString);
        }
    }

    const openTaskPopUp = (e) => {
        const someString = "abc";
        const someFunction = (event) => {
            keyUpEvent(event,someString);
        }
        someButton.removeEventListener('keyup' , someFunction);
        someButton.addEventListener('keyup' , someFunction);        
        //code
    }

Оба someFunction разные? Потому что removeEventListener вообще не работает. console.log(someString); сначала печатает someString один раз, затем дважды, затем трижды и т. Д.

1 Ответ

1 голос
/ 09 июля 2020

Проблема не в том, имеет ли функция имя или нет, а в том, существует ли на самом деле удаляемая функция как обработчик элемента для этого события. Вы по-прежнему создаете функцию каждый раз, поэтому someFunction, созданный одним вызовом openTaskPopUp, не совпадает с функцией someFunction, созданной следующим вызовом, поэтому он не удаляется.

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

const keyUpEvent = (e, someString) => {
    if(e.keyCode === 13){
        console.log(someString);
    }
};

let openTaskPopUpKeyupHandler = null;                                    // ***
const openTaskPopUp = (e) => {
    const someString = "abc";
    someButton.removeEventListener('keyup' , openTaskPopUpKeyupHandler); // ***
    openTaskPopUpKeyupHandler = (event) => {                             // ***
        keyUpEvent(event,someString);
    }
    someButton.addEventListener('keyup' , openTaskPopUpKeyupHandler);    // ***    
    //code
};
...