JQuery Firefox StopPropagation () - PullRequest
       15

JQuery Firefox StopPropagation ()

5 голосов
/ 08 января 2010

Я связываю два обработчика событий с полем ввода 'keydown'. Если клавиша ввода была нажата, обработчик первого события должен остановить распространение события, чтобы оно не попало во второй обработчик события. Я делаю это так:

if (jQuery.browser.msie) {
                    event.cancelBubble = true;
                } else {
                    event.stopPropagation();
                }

теперь это само по себе не останавливает распространение событий ни в IE, ни в Firefox. Он попадает в первый обработчик событий, а затем также во второй обработчик событий. Тем не менее, во втором обработчике событий, я могу фактически проверить, если (e.cancelBubble) в случае IE. Есть ли способ проверить то же самое с Firefox?

1 Ответ

13 голосов
/ 08 января 2010

Просто удалите ваш тест для IE и используйте это:

event.stopImmediatePropagation();

Что будет препятствовать запуску других событий в обоих браузерах.

event.stopPropagation() предотвратит всплытие событий, но не предотвратит запуск других обработчиков событий для того же объекта.

Чтобы ответить на ваш другой вопрос, если вы только что использовали event.stopPropagation(), вы можете проверить event.isPropagationStopped() во втором обработчике.

Предложение : как правило, jQuery полностью абстрагирует поведение всех браузеров, предоставляя единый интерфейс к функциональности. Если вы обнаружите, что запускаете if(jQuery.browser.msie) перед запуском функции jQuery, возможно, есть лучший способ запустить ее, которая будет работать в разных браузерах. И, когда вам нужно протестировать, вы должны использовать jQuery.support для проверки функциональности, а не специфического перехвата браузера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...