在一个简单的游戏应用程序中,我试图传递匿名事件回调函数的一些参数。我只能使用匿名函数来完成它,因为它适合上下文(它的作用域标识参数)。问题是游戏有重启的选项。重新启动后,它会向相同的节点添加新的事件监听器,在这里您可能会猜测旧的事件监听器仍然存在,这会导致功能不正确和应用程序过载。我能想到的解决方案是"刷新"通过在添加新的事件之前删除旧的eventListeners。但我无法找到任何方式考虑事件 - 回调函数是匿名的!
那么,什么可以作为替代解决方案呢?
var adder = function(colorBox, num){
colorBox.addEventListener('click', function(){
eventCall(this, num);
});
}
var eventCall = function(t, num){
var clickedBox = t.style.backgroundColor;
....
答案 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
属性设置为自身将删除所有附加的事件侦听器,并允许您使用要附加的任何新侦听器重新开始。
有关此方法的更多信息,请访问: