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

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

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

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

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

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

有帮助吗?

解决方案

尝试将点击事件合并为一个:

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

其他提示

怎么样:

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

function doFooBar() {
    alert("foo");
    alert("bar");
}

您可以执行以下操作:

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);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top