javascript - javascript - 点击事件目标排除孩子
问题描述
我尝试制作带有子菜单的菜单。如何排除子项目的点击事件?在我的片段中,当我单击子项时。父.open
级被删除。
var menu = document.querySelectorAll('#menu > li')
if (menu.length) {
for (var i = 0; i < menu.length; i++) {
if (menu[i].classList.contains('has-sub')) {
menu[i].addEventListener('click', function(event) {
event.currentTarget.classList.toggle('open')
})
}
}
}
.sub-menu { display: none }
.has-sub.open .sub-menu { display: block }
<ul id="menu">
<li class="has-sub">
<a href="#">Sub-memu</a>
<ul class="sub-menu">
<li><a href="#">Item</a></li>
</ul>
</li>
</ul>
解决方案
您只需event.stopPropagation
要从子菜单中调用。
var menu = document.querySelectorAll('#menu > li')
if (menu.length) {
for (var i = 0; i < menu.length; i++) {
if (menu[i].classList.contains('has-sub')) {
menu[i].addEventListener('click', function(event) {
event.currentTarget.classList.toggle('open')
})
}
}
}
// this is the important part
var submenus = document.querySelectorAll(".sub-menu");
for (var i = 0; i < submenus.length; i ++) {
submenus[i].addEventListener("click", function (event) {
event.stopPropagation();
});
}
.sub-menu { display: none }
.has-sub.open .sub-menu { display: block }
<ul id="menu">
<li class="has-sub">
<a href="#">Sub-memu</a>
<ul class="sub-menu">
<li><a href="#">Item</a></li>
</ul>
</li>
</ul>
推荐阅读
- php - PHP/MySQL 使用 SUM 结果连接表
- javascript - 使用 Javascript 查询 Graphql API 时出现 AWS signature4 计算问题
- sql - 将字符串拆分为行但保留关联数据
- java - Spring Data JPA 实现一对一关系
- apache-spark - Pyspark KAFKA ReadStream 兼容的jar版本
- java - 使用上下文调用 registerForActivityResult
- asp.net - 使用 Angular + Asp.Net Core Web API 上传带有数据的文件时出错
- python-3.x - 谷歌浏览器不允许自动加入 gmeet
- visual-studio - 没有用于带有 UI 表单的 Visual Studio 项目的 .cs 文件?
- android - Android `slack://share-file` 到通道