Javascript 如何仅删除实例中添加的事件处理程序?
我有一个jQuery插件,它在某些元素上附加事件处理程序 在插件的destroy方法中,我希望删除这些事件处理程序,但只删除该插件实例添加的事件处理程序 如果我执行Javascript 如何仅删除实例中添加的事件处理程序?,javascript,jquery,object,jquery-plugins,jquery-events,Javascript,Jquery,Object,Jquery Plugins,Jquery Events,我有一个jQuery插件,它在某些元素上附加事件处理程序 在插件的destroy方法中,我希望删除这些事件处理程序,但只删除该插件实例添加的事件处理程序 如果我执行.off('.myPlugin')它可能会删除其他插件实例添加的事件处理程序,我不希望这样 有可能是我所问的吗?我能想到的唯一方法是为该插件的每个实例生成一个GUID,然后在绑定和解除绑定事件时将其连接到插件名称。jQuery具有事件名称空间,可用于此目的 您可以为添加的事件命名名称空间,这样就可以在不删除其他事件处理程序的情况下删除
.off('.myPlugin')代码>它可能会删除其他插件实例添加的事件处理程序,我不希望这样
有可能是我所问的吗?我能想到的唯一方法是为该插件的每个实例生成一个GUID,然后在绑定和解除绑定事件时将其连接到插件名称。jQuery具有事件名称空间,可用于此目的
您可以为添加的事件命名名称空间,这样就可以在不删除其他事件处理程序的情况下删除它们,因此在插件中您可以像这样添加所有事件处理程序
$( "p" ).on( 'click.pluginName', function(event) {
// do stuff on click
});
当您想要删除那个点击处理程序,并且只删除那个点击处理程序,而不删除其他点击处理程序时,您可以这样做
$( "p" ).off( 'click.pluginName');
在插件中通常是这样做的
文件:
如果需要识别插件的每个实例,可以使用标志、计数器或其他任何东西。
像这样的东西会有用的
$.fn.plugin = function() {
var self = this,
count = $.fn.plugin.counter++;
$(this).on('click.pluginName' + count, function() {
// do stuff on click
});
this.destroy = function() {
self.off('click.pluginName' + count)
}
}
$.fn.plugin.counter = 0;
或其他变体
$.fn.plugin = function(arg) {
if (arg == 'destroy') {
var count = $(this).data('count');
$(this).off('click.pluginName' + count);
}else{
var count = $.fn.plugin.counter++;
$(this).data('count', count).on('click.pluginName' + count, function() {
alert('clicked')
});
}
return this;
}
$.fn.plugin.counter = 0;
您能跟踪绑定的事件吗?您的意思是将事件处理程序函数存储在数组或其他东西中?对如何将其传递给off()?@thelolcat在数组上循环并调用.off(“eventName”,eventHandler)
我正在使用名称空间,但所有实例都具有相同的名称空间:|