jQuery多点击处理程序..如何确保点火顺序?

时间:2009-05-05 21:59:16

标签: jquery event-handling live

我有2个点击处理程序绑定到这样的元素:

在包含我绑定的控件的文件中,我有第一个处理程序,它执行一些特定于该控件的功能

$("#mycontrol").live("click", function() { alert("foo"); });

在使用该控件的主页面中,我有另一个处理程序绑定到该元素以获取页面特定的功能

$("#mycontrol").live("click", function() { alert("bar"); });

我使用'live'因为AJAX调用一直在改变控件,所以处理程序将被重新注册。但是我需要一种方法让“foo”在“bar”之前一直发生......任何建议?

3 个答案:

答案 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);