Всегда ли обработчики вызываются синхронно во время jQuery click ()? - PullRequest
4 голосов
/ 08 июля 2011

В результате небольшого тестирования выясняется, что click() будет запускать любые применимые обработчики синхронно (то есть все обработчики вызываются до возврата click()), что желательно для того, что я разрабатываю,Однако документация jQuery, похоже, не гарантирует (не упоминает так или иначе), что обработчики вызываются синхронно.

Гарантируется ли где-то синхронное поведение или иное безопасное принятие в качестве кросс-браузерного и перспективного?

1 Ответ

4 голосов
/ 08 июля 2011

Да, за кулисами все события щелчка будут выполняться синхронно до того, как включится обычная функциональность по умолчанию. Один из способов увидеть это в действии - добавить одно или несколько событий click в тег привязки. Если какая-либо из прикрепленных функций возвращает false. Это отменит функциональность по умолчанию тега привязки. Другими словами, вы не перейдете на страницу с атрибутом href.

$("a:first")
    .click(function() { alert("I was attached first!"); return false; })
    .click(function() { alert("Running despite the earlier 'return false'!");});

Вы заметите, что они работают синхронно и в том же порядке, в котором они были прикреплены! Любая из прикрепленных функций может возвращать false, чтобы отменить нормальное перенаправление, которое происходит с тегами привязки.

При использовании jQuery для запуска события click все подключенные функции будут запущены до выполнения остальных связанных действий.

$("a:first")
    .click(function() { alert("I was attached first!"); return false; })
    .click(function() { alert("Running despite the earlier 'return false'!");});
$("a:first").click().css("color", "red");

Итак, приведенный выше код ВСЕГДА покажет два предупреждения, а затем изменит цвет ссылки на красный.

...