jQuery自定义事件监听器

时间:2013-12-08 15:27:51

标签: 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 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');

非常感谢

1 个答案:

答案 0 :(得分:4)

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

您可以使用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稍后删除特定事件。