如何使用jQuery将多个事件处理程序绑定到一个事件?

在尝试将多个事件处理程序附加到单个事件时,我遇到了jQuery的奇怪行为。

如何将两个不同的事件处理程序绑定到同一事件?

$(this).focus(function(){/*...*/}); $(this).focus(function(){/*...*/}); // replaces the previous one? 

我错过了什么?

更新

您知道它是否会影响事件数据的路由方式吗? 看来添加第二个事件处理程序会导致eventObject.data属性返回undefined ……?


结语

这个问题在某种程度上与jQuery规范化事件处理的方式以及eventObject数据属性如何根据路由改变有关,我在一个点上有一个延迟计时器,它在以后读取属性时未定义,我通过简单创建解决了它一个当地临时的。

 obj.inputText.bind('blur', obj, function(e) { var div = e.data.div; setTimeout(function() { div.hide(); }, 333); // works! // setTimeout(function() { e.data.div.hide(); }, 333); // does not work }); 

这确实有效。 我只是仔细检查了这段代码:

 $(document).ready(function() { $("#FirstName").focus(function() { console.log("focus1"); }); $("#FirstName").focus(function() { console.log("focus2"); }); }); 

当输入字段被聚焦时,它会产生两个控制台消息。

你是否肯定你的处理程序都没有运行?

你不能在调用所有需要的处理程序的“主”function上创建吗?

$(this).focus(function(){function1(); function2(); etc …..});

理论上这应该有效,尝试使用以下方法解雇所有处理程序:

 $(this).focus( function() { alert('handler1'); }); $(this).focus( function() { alert('handler2'); }); $(this).focus();