jQuery多个事件处理程序 – 如何取消?

我有两个函数绑定到一个点击事件在两个不同的时间(使用jQuery)。 他们被解雇的顺序是很重要的。 他们正在按正确的顺序射击。 问题是,当第一个函数返回false时,第二个函数仍然在开火!

我怎样才能正确地取消事件?

示例代码:

$(document).click(function() { alert('a'); return false; }); $(document).click(function() { alert('b'); }); 

单击页面时,仍会看到“b”警报消息。 这是无法接受的!

使用jQuery事件对象的stopImmediatePropagation函数。

保持其他的处理程序不被执行。 这个方法也通过调用event.stopPropagation()来停止冒泡。

 $(document).click(function(event) { alert('a'); event.stopImmediatePropagation(); return false; }); $(document).click(function() { alert('b'); }); 

我问的第一件事是:为什么你有两个函数绑定到相同的点击事件? 有权访问代码,为什么你不只是打一个电话?

 $(function (){ var callbackOne = function(e){ alert("I'm the first callback... Warning, I might return false!"); return false; }; var callbackTwo = function(e){ alert("I'm the second callback"); }; $(document).click(function (e){ if(callbackOne(e)){ callbackTwo(e); } }); }); 

谢谢,取消绑定工作重新定义函数。

  $(document).ready(function(){ $("#buscar_mercaderia").click(function(){ alert('Seleccione Tipo de mercaderia'); }); $(".tipo").live('click',function(){ if($(this).attr('checked')!=''){ if($(this).val()=='libro'){ $("#buscar_mercaderia").unbind('click'); $("#buscar_mercaderia").click(function(){ window.open('buscar_libro.php','Buscar Libros', 'width=800,height=500'); }); }else if($(this).val()=='otra'){ $("#buscar_mercaderia").unbind('click'); $("#buscar_mercaderia").click(function(){ window.open('buscar_mercaderia.php','Buscar Mercaderias', 'width=800,height=500'); }); } } }) 

使用解除绑定帮助吗?

 $(document).click(function() { alert('a'); $(this).unbind('click'); return false; }); 

如果说什么nickf不起作用,你可以使用一个小型的状态机:

 var trigger = 0; $(document).click(function() { alert('a'); if(you_want_to_return_false) { trigger = 1; return false; } }); $(document).click(function() { if(trigger !== 0) { alert('b'); } trigger = 0; }); 

不是最漂亮的解决scheme,但它会工作。