在尝试将多个事件处理程序附加到单个事件时,我遇到了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
});
答案 0 :(得分:3)
这确实有效。我只是仔细检查了这段代码:
$(document).ready(function() {
$("#FirstName").focus(function() {
console.log("focus1");
});
$("#FirstName").focus(function() {
console.log("focus2");
});
});
当输入字段被聚焦时,它会产生两个控制台消息。
你是否同意你的处理程序都没有运行?
答案 1 :(得分:1)
你不能在调用所有需要的处理程序的“master”函数上创建吗?
$(this).focus(function(){function1(); function2(); etc .....});
答案 2 :(得分:0)
理论上这应该有效,如果所有处理程序都是使用以下方法解决的,请尝试:
$(this).focus( function() { alert('handler1'); });
$(this).focus( function() { alert('handler2'); });
$(this).focus();