我有2个点击处理程序绑定到这样的元素:
在包含我绑定的控件的文件中,我有第一个处理程序,它执行一些特定于该控件的功能
$("#mycontrol").live("click", function() { alert("foo"); });
在使用该控件的主页面中,我有另一个处理程序绑定到该元素以获取页面特定的功能
$("#mycontrol").live("click", function() { alert("bar"); });
我使用'live'因为AJAX调用一直在改变控件,所以处理程序将被重新注册。但是我需要一种方法让“foo”在“bar”之前一直发生......任何建议?
答案 0 :(得分:5)
怎么样:
$("#mycontrol").live("click", doFooBar);
function doFooBar() {
alert("foo");
alert("bar");
}
答案 1 :(得分:4)
尝试将点击事件合并为一个:
function foo() { alert("foo"); }
function bar() { alert("bar"); }
$("#mycontrol").live("click", function(){ foo.call(this); bar.call(this); });
答案 2 :(得分:2)
您可以执行以下操作:
var arrEventHandlers = [];
function registerClickEvent(fnCallback)
{
arrEventHandlers.push(fnCallback);
}
registerClickEvent (function () { alert ("Foo"); });
registerClickEvent (function () { alert ("Bar"); });
function clickHandler ()
{
for (var i = 0, size = arrEventHandlers.length; i < size; i++)
{
arrEventHandlers[i].apply (...);
}
}
$("#mycontrol").live("click", clickHandler);