Концепция «всплывания» аналогична ситуации, когда у вас есть дочерний элемент с событием щелчка, и вы не хотите, чтобы он вызывал событие щелчка родительского элемента. Вы можете использовать event.stopPropagation()
.
event.stopPropagation()
в основном говорит, что это событие щелчка следует применять только к ЭТОМУ ДОчернему узлу и ничего не сообщать родительским контейнерам, потому что я не хочу, чтобы они реагировали.
Захват событий:
| |
---------------| |-----------------
| element1 | | |
| -----------| |----------- |
| |element2 \ / | |
| ------------------------- |
| Event CAPTURING |
-----------------------------------
Всплывающие события:
/ \
---------------| |-----------------
| element1 | | |
| -----------| |----------- |
| |element2 | | | |
| ------------------------- |
| Event BUBBLING |
-----------------------------------
Если вы используете live()
или delegate()
, вам потребуется return false;
, хотя это может и не сработать. Прочитайте цитату ниже.
Согласно документам jQuery:
Поскольку метод .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/
person
AlienWebguy
schedule
04.08.2011