激活事件侦听器时删除事件侦听器

时间:2018-03-26 01:29:23

标签: javascript html5 event-listener

我将事件监听器激活得很好,但是事件监听器在激活之后将其自身移除是远远不能理解的。从我自己尝试研究这个到目前为止,我的理解是附加到事件监听器的函数需要给出一个名称,删除事件监听器需要能够删除。我试过了,但无法让它工作,因为它导致了不再再认识'e'的问题。这是我的代码:

that.enter = function(imageID, textID) {
    // Listen for the ENTER key and mouse click.
    console.log('Add event listeners...');
    console.log(imageID + ' ' + textID);
    document.addEventListener('keydown', function(e) { 
        if (e.which === 13) {
            document.getElementById(imageID).click();
            console.log('keydown activated');
            console.log('removing keydown... ');
            document.removeEventListener('keydown', function(e){});
            console.log('keydown removed');
        }
    });
    document.addEventListener('click', function(e) { 
        if (e.target.id != imageID && e.target.id != textID) {
            document.getElementById(imageID).click();
            console.log('click activated');
            console.log('removing click... ');
            document.removeEventListener('click', function(e){});
            console.log('click removed');
        }
    });
    console.log('DONE');
};

1 个答案:

答案 0 :(得分:2)

将函数放在变量中,这样您以后可以在使用removeEventListener时引用它。例如

document.addEventListener('keydown', theListener);
function theListener(e) { 
    if (e.which === 13) {
        document.getElementById(imageID).click();
        console.log('keydown activated');
        console.log('removing keydown... ');
        document.removeEventListener('keydown', theListener);
        console.log('keydown removed');
    }
}

removeEventListener的第二个参数必须与addEventListener中使用的完全相同的函数 - 它不会识别您刚刚声明为在侦听器列表中的新函数。