使用内联匿名函数时删除事件侦听器

时间:2017-05-10 18:18:01

标签: javascript html css callback event-listener

在一个简单的游戏应用程序中,我试图传递匿名事件回调函数的一些参数。我只能使用匿名函数来完成它,因为它适合上下文(它的作用域标识参数)。问题是游戏有重启的选项。重新启动后,它会向相同的节点添加新的事件监听器,在这里您可能会猜测旧的事件监听器仍然存在,这会导致功能不正确和应用程序过载。我能想到的解决方案是"刷新"通过在添加新的事件之前删除旧的eventListeners。但我无法找到任何方式考虑事件 - 回调函数是匿名的!

那么,什么可以作为替代解决方案呢?

var adder = function(colorBox, num){
    colorBox.addEventListener('click', function(){
        eventCall(this, num);
    });
}

var eventCall = function(t, num){
        var clickedBox = t.style.backgroundColor;
....

3 个答案:

答案 0 :(得分:2)

您可以将功能存储在某处,以便以后在删除时可以引用它。 使用数组,您可以存储多个事件处理程序,而不会被多个对加法器函数的调用覆盖,然后有一个删除所有这些函数的函数,如:

df_reorder <- df[order(df$name, df$time), ]

答案 1 :(得分:0)

您可以使用off函数(http://api.jquery.com/off/)通过jQuery删除事件处理程序。例如

$( "p" ).off();

从所有段落中删除所有事件处理程序。因此,如果您将所有dom元素分类为特定类,则仍然可以。

答案 2 :(得分:0)

您可以使用outerHTML属性删除元素上的所有事件侦听器。

colorBox.outerHTML = colorBox.outerHTML;

outerHTML属性设置为自身将删除所有附加的事件侦听器,并允许您使用要附加的任何新侦听器重新开始。

有关此方法的更多信息,请访问:

https://stackoverflow.com/a/32809957/5463636

相关问题