首页 文章

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

提问于
浏览
44

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

How can I properly cancel the event?

示例代码:

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

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

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

5 回答

  • 2

    谢谢,unbind用于重新定义功能 .

    $(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');  });
                    }
                }
            })
    
  • 2

    使用unbind帮助吗?

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

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

    使其余的处理程序不被执行 . 此方法还通过调用event.stopPropagation()来停止冒泡 .

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

    我要问的第一件事是:为什么你有 two 函数绑定到同一个点击事件?有权访问代码,为什么不只进行一次调用?

    $(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);
            }
        });
    });
    
  • 1

    如果说诺夫说不起作用,你可以使用一个小型状态机:

    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;
    });
    

    不是最漂亮的解决方案,但它会起作用 .

相关问题