Ответ 1
jQuery использует только всплывающие события. Если вы хотите добавить обработчик событий, который использует модель захвата, вы должны сделать это явно, используя addEventListener
, с третьим аргументом true
как показано в вопросе.
Я новичок в jQuery, и я пытаюсь понять концепцию захвата и пузыря.
Я прочитал много статей, но большинство из них описывало распространение событий для Javascript.
Предположим, что у нас есть следующий код HTML:
<div id="outter">
outter
<div id="inner">
inner
</div>
</div>
Захват - это фаза, когда мы спускаемся вниз по элементам DOM, и пузырьки - это когда мы поднимаемся.
В Javascript вы можете решить, каким образом следовать (используя истинные или ложные параметры):
element.addEventListener('click',doSomething,true) --> capture phase
element.addEventListener('click',doSomething,false) --> bubble phase
Есть ли что-то похожее для jQuery, чтобы обозначить, какой способ следовать, кроме способа JavaScript?
Также использует ли jQuery фазу по умолчанию? Например, пузырь?
Потому что я использовал следующий код, чтобы проверить это:
CSS
<style>
div {
border: 1px solid green;
width: 200px;
}
</style>
JQuery
<script>
$(document).ready(function(){
$('div').click(function(){
$(this).animate({'width':'+=10px'},{duration: 3000})
});
});
</script>
Похоже, что когда я нажимаю на div-outter, только этот div оживляет более крупный div. Когда я нажимаю на внутренний div, div делится на более крупные div.
Я не знаю, ошибаюсь ли я, но этот тест показывает, что метод распространения браузера по умолчанию - это пузырь.
Пожалуйста, поправьте меня, если я ошибаюсь.
jQuery использует только всплывающие события. Если вы хотите добавить обработчик событий, который использует модель захвата, вы должны сделать это явно, используя addEventListener
, с третьим аргументом true
как показано в вопросе.
Событие, которое начинается, начиная с самого внутреннего элемента до самого внешнего элемента.
Захват событий, который начнет выполняться с внешнего элемента на самый внутренний элемент.
Но jQuery будет использовать всплывающее окно событий. Мы можем добиться захвата событий с:
$("body")[0].addEventListener('click', callback, true);
Третий параметр в addEventListener, который сообщает браузеру, принимать ли всплывающее окно или захват события.
По умолчанию это ложь.
Если оно ложно, тогда будет происходить всплытие событий. Если это правда, тогда потребуется захват событий.