jQuery: Как я могу использовать event.preventDefault () с пользовательскими событиями? - PullRequest
34 голосов
/ 09 февраля 2010

Как я могу узнать в своем коде запуска, что preventDefault был вызван?

$(document).trigger('customEvent', params);
if (/* ??? */)
    doDefaultActions();

Ответы [ 4 ]

46 голосов
/ 09 февраля 2010

trigger () также может принимать объект события, поэтому, если вы можете создать объект события, например:

var event = jQuery.Event("customEvent");
$(document).trigger(event);

, затем вы можете проверить после триггера, чтобы увидеть, был ли метод protectDefault () вызван так:

var prevented = event.isDefaultPrevented();
1 голос
/ 09 февраля 2010

Пользовательские события не имеют некоторых действий по умолчанию, которые происходят .. (они являются пользовательскими). ​​

С другой стороны, если вы хотите прекратить пузырьковый эффект этого события для других, взгляните наtriggerHandler, который не всплывает до иерархии ..

1 голос
/ 09 февраля 2010

Если вы спрашиваете, как узнать, было ли предотвращено значение по умолчанию, используйте:

event.isDefaultPrevented()

Будет возвращено значение «истина» или «ложь» в зависимости от того, был ли вызван метод protectDefault ().

EDIT: http://api.jquery.com/event.isDefaultPrevented/

0 голосов
/ 09 февраля 2010

Насколько мне известно, вызов warnDefault () - это предотвращение реакции собственного браузера на такие вещи, как щелчки по тегам привязки или нажатия клавиш в текстовых полях. Как только цикл обработки событий закончен, он закончен. Что касается выдуманных событий, я не думаю, что это будет иметь какое-либо влияние, поскольку все дело в системе обработки событий jQuery, а не в функциональности собственного браузера.

Ваш код может установить где-нибудь флаг для связи с «внешним миром».

[править] ооо, вы можете попытаться заставить обработчик спрятать ссылку на объект события где-нибудь, чтобы его мог найти внешний код, а затем выполнить внешнюю проверку с помощью isDefaultPrevented (). Однако я не знаю, сработает ли это.

...