function show1() {
console.log("ok1");
document.getElementById("a2").removeEventListener("click", delegate);
}
function show2() {
console.log("ok2");
}
function show3() {
console.log("ok3");
}
function delegate(event) {
var flag = event.target;
switch (flag.id) {
case "a1":
show1();
break;
case "a2":
show2();
break;
case "a3":
show3();
break;
}
}
ob = document.getElementById("tl");
ob.addEventListener("click", delegate);
<ul id="tl">
<li id="a1">a1</li>
<li id="a2">a2</li>
<li id="a3">a3</li>
</ul>
Родительский узел ul
содержит три дочерних узла li
, связывает прослушиватель событий с родительским узлом, позволяет ul
делегировать прослушивание событий всего узла.
Мое ожидание:
, когда вы нажимаете a1
, функция show1
удалит прослушиватель событий у своего брата, чей идентификатор равен a2
.
То есть вы нажимаете li
, чей идентификаторa2
после нажатия li
с идентификатором a1
, ok2
не будет отображаться на консоли.
Реальное действие:
Вы нажимаете li
с идентификатором a2
после нажатия li
с идентификатором a1
, ok2
будет отображаться на консоли.
Почему
document.getElementById("a2").removeEventListener("click",delegate);
не может удалить прослушиватель событий у братьев и сестер?
Как это исправить?