Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何仅删除实例中添加的事件处理程序?_Javascript_Jquery_Object_Jquery Plugins_Jquery Events - Fatal编程技术网

Javascript 如何仅删除实例中添加的事件处理程序?

Javascript 如何仅删除实例中添加的事件处理程序?,javascript,jquery,object,jquery-plugins,jquery-events,Javascript,Jquery,Object,Jquery Plugins,Jquery Events,我有一个jQuery插件,它在某些元素上附加事件处理程序 在插件的destroy方法中,我希望删除这些事件处理程序,但只删除该插件实例添加的事件处理程序 如果我执行.off('.myPlugin')它可能会删除其他插件实例添加的事件处理程序,我不希望这样 有可能是我所问的吗?我能想到的唯一方法是为该插件的每个实例生成一个GUID,然后在绑定和解除绑定事件时将其连接到插件名称。jQuery具有事件名称空间,可用于此目的 您可以为添加的事件命名名称空间,这样就可以在不删除其他事件处理程序的情况下删除

我有一个jQuery插件,它在某些元素上附加事件处理程序

在插件的destroy方法中,我希望删除这些事件处理程序,但只删除该插件实例添加的事件处理程序

如果我执行
.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)
我正在使用名称空间,但所有实例都具有相同的名称空间:|