嵌套类名上的事件监听器
eventlistener on nested classnames
我想在单击每个带有 class "category" 的元素时切换 class "collapsed"。问题是,"category" 元素相互嵌套,子元素也会在其父元素上切换 class。
一个例子
HTML结构:
<div class="category">
<div class="category">
<div class="category"></div>
</div>
</div>
<div class="category">
<div class="category"></div>
</div>
Javascript:
var categories = document.getElementsByClassName("category");
for (var i = 0; i < categories.length; i++) {
categories[i].addEventListener("click", function () {
this.classList.toggle("collapsed");
});
}
当我单击嵌套元素时,"this" select 或 select 具有 class "category" 的父元素。
这是因为事件冒泡并触发所有带有 class 的容器元素。你应该打电话给 event.stopPropagation()
来防止这种情况。
var categories = document.getElementsByClassName("category");
for (var i = 0; i < categories.length; i++) {
categories[i].addEventListener("click", function (e) {
e.stopPropagation();
this.classList.toggle("collapsed");
});
}
我想在单击每个带有 class "category" 的元素时切换 class "collapsed"。问题是,"category" 元素相互嵌套,子元素也会在其父元素上切换 class。
一个例子
HTML结构:
<div class="category">
<div class="category">
<div class="category"></div>
</div>
</div>
<div class="category">
<div class="category"></div>
</div>
Javascript:
var categories = document.getElementsByClassName("category");
for (var i = 0; i < categories.length; i++) {
categories[i].addEventListener("click", function () {
this.classList.toggle("collapsed");
});
}
当我单击嵌套元素时,"this" select 或 select 具有 class "category" 的父元素。
这是因为事件冒泡并触发所有带有 class 的容器元素。你应该打电话给 event.stopPropagation()
来防止这种情况。
var categories = document.getElementsByClassName("category");
for (var i = 0; i < categories.length; i++) {
categories[i].addEventListener("click", function (e) {
e.stopPropagation();
this.classList.toggle("collapsed");
});
}