javascript
  • jquery
  • events
  • 2011-03-03 53 views 26 likes 
    26

    我有一个已经定义的点击事件。我想知道什么是最好的方式将另一个事件处理程序追加到这个事件而不用触及这个代码(如果可能的话)。jQuery - 追加一个事件处理程序到已有的点击事件

    有没有办法只是将另一个事件处理程序附加到已定义的点击事件?

    这是当前点击事件定义:

    $(".HwYesButton", "#HwQuizQuestions") 
         .append("<a href='javascript:void(0);' rel='.HwYesButton'>Yes</a>") 
         .click(function(event) { 
          var button = $(this).parent(); 
          var questionId = button.attr('id'); 
          $iadp.decisionPoint["HwQuizYourself"].Input.inputProvided(questionId); 
          button.find(".HwNoButton").removeClass("HwButtonSelected"); 
          $(this).addClass("HwButtonSelected"); 
          button.removeClass("HwQuestionSkipped"); 
    
          $iadp.flat.setBoolean(questionId, true); 
          return false; 
         }); 
    

    回答

    27

    你能做的唯一的事情就是附加其他(附加)处理:

    $(".HwYesButton", "#HwQuizQuestions").click(function() { 
        // something else 
    }); 
    

    jQuery将调用处理程序的顺序它们已被附加到元素上。

    您不能“扩展”已定义的处理程序。


    Btw。你的表述有点不准确。您没有定义点击事件。您只附加点击事件处理程序。点击事件是在用户点击某个元素时由浏览器生成的。

    对于一个元素,您可以拥有尽可能多的点击处理程序。也许你已经习惯了这种普通的JavaScript:

    element.onclick = function() {} 
    

    使用这种方法,你确实可以只附加一个处理程序。但我认为jQuery使用的JavaScript provides some advanced event handling methods

    +0

    完美..谢谢 – Nick 2011-03-03 16:43:18

    4

    您可以将其他点击事件写入同一个事件,并且两者都会被触发。看到它here

    <a id="clickme">clickme</a>  
    
    $("#clickme").click(function(){  
    alert("first click handler triggered"); 
    }); 
    $("#clickme").click(function(){ 
    alert("second click handler triggered"); 
    }); 
    
    0

    Ajax可能会使问题复杂化在这里。如果你调用两个事件,第一个是ajax调用,那么第二个事件可能会在响应回来之前就开始。

    所以,即使事件被按正确的顺序触发,你真正需要的是进入ajax调用中的回调函数。

    很难做到不编辑原始代码。

    5

    我知道这是旧的文章,但也许​​这仍然可以帮助别人,因为我仍设法我的搜索期间在这个问题上跌倒...

    我试图做同样的事,除了我想我的行动触发现有的内联onClick事件。这是我迄今为止所做的,并且在我进行最初的测试后,它似乎工作正常。它可能不会处理不内联的事件,比如那些被其他javascipt绑定的事件。

     $(function() { 
          $("[onClick]").each(function(){ 
           var x = $(this).attr("onClick"); 
           $(this).removeAttr("onClick").unbind("click"); 
           $(this).click(function(e){ 
            // do what you want here... 
            eval(x); // do original action here... 
           }); 
          }); 
         }); 
    
    相关问题