JQuery несколько обработчиков кликов .. как обеспечить порядок стрельбы? - PullRequest
1 голос
/ 06 мая 2009

У меня есть 2 обработчика щелчка, связанные с элементом, подобным так:

в файле, который содержит элемент управления, с которым я связан, у меня есть первый обработчик, который выполняет некоторые функции, специфичные для этого элемента управления

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

На главной странице, которая использует этот элемент управления, у меня есть другая привязка обработчика к этому элементу для функциональности, специфичной для страницы

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

Я использую 'live', потому что вызовы AJAX постоянно меняют элемент управления, поэтому обработчики будут перерегистрированы. Однако мне нужен способ, чтобы "foo" происходил перед "bar" последовательно ... какие-либо предложения?

Ответы [ 3 ]

5 голосов
/ 06 мая 2009

Как насчет:

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

function doFooBar() {
    alert("foo");
    alert("bar");
}
4 голосов
/ 06 мая 2009

Попробуйте объединить события клика в одно:

function foo() { alert("foo"); }
function bar() { alert("bar"); }
$("#mycontrol").live("click", function(){ foo.call(this); bar.call(this); });
2 голосов
/ 06 мая 2009

Вы можете сделать что-то вроде следующего:

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...