Понятие «всплывающее» похоже на то, что если у вас есть дочерний элемент с событием click, и вы не хотите, чтобы он вызывал событие click родительского элемента. Вы можете использовать event.stopPropagation()
.
event.stopPropagation()
в основном говорит, примените только это событие щелчка к Этому УЗЕЛУ РЕБЕНКА и ничего не говорите родительским контейнерам, потому что я не хочу, чтобы они реагировали.
Захват событий:
* * 1010
Событие Bubbling:
/ \
---------------| |-----------------
| element1 | | |
| -----------| |----------- |
| |element2 | | | |
| ------------------------- |
| Event BUBBLING |
-----------------------------------
Если вы используете live()
или delegate()
, вам потребуется return false;
, хотя это может не сработать. Прочитайте цитату ниже.
За JQuery Docs :
Поскольку метод .live () обрабатывает события после их распространения в
верхней части документа, невозможно остановить распространение
живые события. Аналогично, события, обработанные .delegate () будут распространяться
элементам, которым они делегированы; обработчики событий привязаны к
любые элементы под ним в дереве DOM уже будут выполнены
ко времени вызова делегированного обработчика события. Эти обработчики,
поэтому, может препятствовать тому, чтобы делегированный обработчик вызвал
вызывая event.stopPropagation () или возвращая false.
В прошлом это была проблема с платформой, в Internet Explorer была пузырьковая модель, а Netscape больше занимался захватом (но поддерживал оба).
Модель W3C требует, чтобы вы могли выбрать, какой вы хотите.
Я думаю, что пузырьки более популярны, потому что, как уже говорилось, есть некоторые платформы, которые поддерживают только пузырьки ... и это имеет смысл как режим по умолчанию.
Какой из них вы выбираете, в значительной степени является результатом того, что вы делаете, и что имеет для вас смысл.
Подробнее http://www.quirksmode.org/js/events_order.html
Еще один замечательный ресурс: http://fuelyourcoding.com/jquery-events-stop-misusing-return-false/