Порядок срабатывания событий
В этой статье сказано:
Примечательно, что на одно событие может реагировать не только тот элемент, на котором произошло событие, но и элементы над ним. Это очень удобно, например если в элементе содержатся много дочерних HTML-тегов - не обязательно ставить обработчик на каждый, достаточно указать один обработчик на родителе и в нем ловить все события. Но в примерах, обработчики вешаются на все (и вложенные) элементы! Как бы выглядел код, чтобы один обработчик на родителе ловил все события?? |
Пример некроссбраузерный, но мысль понять можно.
<div id="test"> <span>Click: 0</span> <span>Click: 0</span> </div> <script> document.getElementById("test").onclick = function(event){ if( event.target.tagName.toLowerCase() === "span" ) event.target.innerHTML = "Click: " + ( + event.target.innerHTML.match(/\d+$/)[ 0 ] + 1 ); }; </script> |
Цитата:
Почему event.target - span?? Ведь мы повесили обработчик на div?? |
Цитата:
<div id="div"> <span id="span">Click</span> </div> <script> document.getElementById("div").onclick = function(event){ alert([ this === document.getElementById("div"), event.target === document.getElementById("span") ]); }; </script> |
А если такой код:
<div> <div> <div onclick="handler()"> </div> </div> </div> Как он выполнится?? Обработчик только у самого внутреннего - Он выполнится трижды?? |
Цитата:
|
Цитата:
Это просто потому что обработчик всего один?? 2) событие возникнет 4 раза(ещё и в боди))) А не 5?? )) на корневой элемент HTML всплытие не распространяется?? |
Часовой пояс GMT +3, время: 16:23. |