Я надеюсь, что кто-то может помочь мне понять, почему приведенный ниже сценарий терпит неудачу. У меня есть родительский тег ul с обработчиком событий, который обуславливает данный потомок элемента li в другом теге ul, вложенном в него. Разметка:
<ul id="outerUL">
<li>LIST ITEM 1</li>
<li>LIST ITEM 2</li>
<li>
<ul id="innerUL">
<li>LIST ITEM 3</li>
<li>LIST ITEM 4</li>
<li>
<ul id="inMostUL">
<li>LIST ITEM 5</li>
<li>LIST ITEM 6</li><!-- we condition for this element -->
<li>LIST ITEM 7</li>
</ul>
</li>
</ul>
</li>
</ul>
Javascript: (кажется, что условный .stopPropagation() в вызове предка терпит неудачу...)
var outerMostUL = document.getElementById("outerUL");
outerMostUL.addEventListener('click',
function(e){
if(e.target.innerHTML === "LIST ITEM 6"){
e.stopPropagation();
alert("you clicked LIST ITEM 6. Event travel stops.");
// return; // a return WILL work
}
// below runs if propagation continues...
alert("outerMostUL event handler fired!");
},
false);
Теперь, если я решу ввести сдержанный вызов .addEventListener() для этого тега li, .stopPropagation() будет работать, как и ожидалось, например:
// A discreet event handler does work
var inMostUL = document.getElementById("inMostUL");
inMostUL.children[1].addEventListener('click', function(e){
e.stopPropagation();
alert("The descendent event fires, but stops now.");
});
Итак, мой вопрос: СЛЕДУЕТ ли вам использовать условие в обработчике предка для данного e.target и остановить распространение его события, если включено всплытие? Кажется, что у элемента должен быть свой собственный обработчик, связанный с инициированием события, но, возможно, я путаю распространяющееся событие, перемещающееся по цепочке предков, с фактическим добавлением прослушивателя событий с помощью этого метода. Любой легкий пролив будет принят с благодарностью. Я просто пытаюсь осмыслить обработку событий js на простых примерах. Спасибо за любое рассмотрение этого.