javascript - jQuery 自定义事件监听器

标签 javascript jquery events

我有以下代码:

myCustomMethod(function(){
    $(document).on('click','#element',function(){
        console.log('First call');
    });
});

setTimeout(function(){
    myCustomMethod(function(){
        $(document).on('click','#element',function(){
            console.log('Second call, event first call should be destroyed');
        });
    });
},2000);


function myCustomMethod(funcn){
    funcn();            
}

当我使用浏览器进行测试时,我点击了#element console show up First call

但 2 秒后我再次点击它显示

First call
Second call, event first call should be destroyed

如果事件监听器被修改,我想删除它(下面的部分)

Old

$(document).on('click','#element',function(){
    console.log('First call');
});

New

$(document).on('click','#element',function(){
    console.log('Second call, event first call should be destroyed');
});

只触发 console.log('Second call, event first call should be destroyed');

非常感谢

最佳答案

添加事件处理程序不会删除以前的事件处理程序,它只会添加更多,这就是旧事件处理程序未被删除的原因。

你可以使用 off()删除 jQuery 中的事件处理程序

$(document).on('click.custom', '#element', function(){
    console.log('First call');
});

setTimeout(function(){
    $(document).off('click.custom').on('click.newclick','#element',function(){
        console.log('Second call, event first call should be destroyed');
    });
},2000);

删除您要执行的特定事件的所有先前处理程序

$(document).off('click');

您使用的函数根本没有意义,请注意您可以 namespace events稍后删除特定事件。

关于javascript - jQuery 自定义事件监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20455115/

相关文章:

javascript - 为什么一个按钮会导致我的整个网页重新加载?

javascript在textarea中捕获粘贴事件

objective-c 触摸事件

javascript - 获取带有阿拉伯字母的 `document.location.href`

javascript - type=text/javascript 和 language=javascript 之间的区别

javascript - 参数中带有 getter 的 AngularJS 资源

javascript - 处理事件后将颜色放入元素中

javascript - 如何将第三方 JavaScript 库添加到 Meteor 应用程序?

javascript - 单击时在两个函数循环之间切换

javascript - 如果文本区域有输入,如何防止关闭 blockUI