如何在代码阶段禁用绑定的JQUERY事件处理程序?

问题描述:

我不熟悉JQUERY,但是我有一个web应用程序,当我双击我的html主体上的一个单词时,弹出一个模式窗口。问题是因为modal div被加载到html body,当我点击模式时,处理程序被执行,我想禁用它。如何在代码阶段禁用绑定的JQUERY事件处理程序?

这就是我绑定的事件处理程序:

$("body").bind('dblclick', function(e){ ... 

,我想在这里禁用它:

$('#element_to_pop_up').bPopup({   
     nOpen:function(){ 
+0

尝试'$(“body”)。unbind' – Rayon

您可以使用unbind()方法:

$('#element_to_pop_up').bPopup({   
    nOpen:function(){ 
     $("body").unbind('dblclick'); 
    }); 
}); 

但是要记住当你关闭弹出窗口时,如果你希望它在弹出窗口后工作,你将不得不再次绑定它封闭。

尝试unbind事件是这样的:

$('body').unbind('dbclick'); 

Documentation

干脆不要做在单击处理任何事情,如果触发事件的元素是弹出:

$("body").bind('dblclick', function(e){ 
    if ($(e.target).closest('#element_to_pop_up').length) { 
     return false; 
    } 
    //... 
+0

对我来说似乎更好。 – Jai

+0

如果'element_to_pop_up'里面的元素被点击了怎么办? – Rayon

+0

@ t.niese你说得对。我不确定,必须先查看文档:) – Andreas

使用更好on()而不是bind()功能:

从jQuery 1.7开始,.on()方法是 将事件处理程序附加到文档的首选方法。对于早期版本, .bind()方法用于将事件处理程序直接附加到 元素。

参见Jquery On()Jquery Off()

因此,

$('element').on('dblclick', function(e){...}); 

$('element').off() - 将从给定元素中删除所有事件侦听器。 $('element').off('dblclick') - 将只删除给定元素的双击