1

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

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

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

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

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

我使用“live”,因为 AJAX 调用一直在更改控件,因此将重新注册处理程序。但是我需要一种方法,以便“foo”始终在“bar”之前发生……有什么建议吗?

4

3 回答 3

5

怎么样:

$("#mycontrol").live("click", doFooBar);

function doFooBar() {
    alert("foo");
    alert("bar");
}
于 2009-05-05T22:05:03.577 回答
4

尝试将点击事件合二为一:

function foo() { alert("foo"); }
function bar() { alert("bar"); }
$("#mycontrol").live("click", function(){ foo.call(this); bar.call(this); });
于 2009-05-05T22:05:40.360 回答
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);
于 2009-05-05T22:08:18.827 回答