Порядок срабатывания событий
В этой статье сказано:
Примечательно, что на одно событие может реагировать не только тот элемент, на котором произошло событие, но и элементы над ним. Это очень удобно, например если в элементе содержатся много дочерних 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, время: 10:10. |