Недавно я обнаружил разницу между Bubbling и Capturing для событий DOM, используя javascript.Теперь я понимаю, как это должно работать, но я обнаружил странную ситуацию и хотел бы знать, почему это происходит.
Согласно Режиму причуда , распространение события начинается сзахват на внешнем div, достигает дна, а затем пузыри до вершины.Проблема заключалась в том, что я начал делать некоторые тесты.
На этом первом все работает, как и ожидалось:
<div id="out">
<div id="in">
Click This!!
</div>
</div>
<script type="text/javascript">
document.getElementById('out').addEventListener('click', function(){
alert('capture out');
}, true);
document.getElementById('in').addEventListener('click', function(){
alert('capture in');
}, true);
document.getElementById('out').addEventListener('click', function(){
alert('bubble out');
}, false);
document.getElementById('in').addEventListener('click', function(){
alert('bubble in');
}, false);
</script>
Если вы щелкнете по тексту, предупреждения перейдут на «захват»захватить в ',' пузырь в 'и' пузырь из '.Проблема заключается в использовании следующего кода:
<div id="out">
<div id="in">
Click This!!
</div>
</div>
<script type="text/javascript">
document.getElementById('out').addEventListener('click', function(){
alert('bubble out');
}, false);
document.getElementById('in').addEventListener('click', function(){
alert('bubble in');
}, false);
document.getElementById('out').addEventListener('click', function(){
alert('capture out');
}, true);
document.getElementById('in').addEventListener('click', function(){
alert('capture in');
}, true);
</script>
В этом случае оповещения идут «захват», «всплывание», «захват» и «выпадение».Если вы заметили, единственное отличие состоит в том, что на втором месте сначала назначается пузырение, но я не думаю, что это должно иметь какое-либо значение.
Я пробовал это с Firefox и Chrome, и результатыодинаковы (я понимаю, что Internet Explorer не обрабатывает захват).