jQuery – 将事件处理程序附加到预先存在的单击事件

我有一个已经定义的点击事件。 我想知道在不触及此代码的情况下将另一个事件处理程序附加到此事件的最佳方法是什么(如果可能)。

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

这是当前的点击事件定义:

$(".HwYesButton", "#HwQuizQuestions") .append("Yes") .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; }); 

你唯一能做的就是附加另一个(附加)处理程序:

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

jQuery将按照它们附加到元素的顺序调用处理程序。

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


顺便说一句。 你的表述有点不精确。 您没有定义点击事件 。 您只附加了单击事件处理程序 。 当用户单击某个元素时,浏览器会生成click事件。

您可以为一个元素添加任意数量的单击处理程序。 也许你习惯于普通的JavaScript:

 element.onclick = function() {} 

使用此方法,您确实只能附加一个处理程序。 但JavaScript提供了一些高级事件处理方法 ,我假设jQuery使用它们。

我知道这是一个老post,但也许这仍然可以帮助某人,因为我在搜索过程中仍然遇到了这个问题…

我试图做同样的事情,除了我希望我的动作在现有的内联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... }); }); }); 

您可以将另一个点击事件写入同一个事件,并且两者都将被触发。 在这里看到它

 clickme  

Ajax可以使问题复杂化。 如果您调用两个事件,第一个是ajax调用,那么第二个事件可能会在响应返回之前触发。

因此,即使事件以正确的顺序触发,您真正需要的是进入ajax调用中的回调函数。

没有编辑原始代码就很难做到。