javascript - Javascript 菜单一次打开所有子菜单
问题描述
尝试制作一个简单的香草 js 下拉菜单。我想使用 vanilla js 来练习,并且完全坚持这一点。问题是,当我单击带有下拉列表的链接时,所有下拉列表都会打开。使用 forEach 但不确定我做错了什么。
let itemsHasDropdowns = document.querySelectorAll('.has_children');
let dropdowns = document.querySelectorAll('.dropdown');
//looping through all buttons with dropdowns
itemsHasDropdowns.forEach(function(singleItemHasDropdowns){
//adding click event to each btn
singleItemHasDropdowns.addEventListener('click', function(){
//looping through each dropdown
dropdowns.forEach(function(dropdown) {
//adding class that opens dropdowns
dropdown.classList.add('open');
});
});
});
https://codepen.io/YourMuseAnya/pen/XWXXPYa
注意:我已经查看了关于 SO 的其他问题。每个人似乎都在使用 jquery ,而不是 vanilla JS。YouTube 和谷歌搜索也没有帮助。
我不需要有人为我写整件事,如果可以的话,只要把我推向正确的方向。谢谢
编辑:尝试这样做,但现在只打开最后一个下拉菜单......
let theParentOfDropdowns = document.querySelectorAll('.has_children');
let dropdowns = document.querySelectorAll('.dropdown');
let singleDropdown = '';
dropdowns.forEach(function(dropdown){
singleDropdown = dropdown;
});
theParentOfDropdowns.forEach(function(singleItemHasDropdowns){
singleItemHasDropdowns.addEventListener('click', openDropdown, false);
});
function openDropdown(e) {
if(e.target !== e.currentTarget) {
let clickedItem = e.target.tagName;
console.log(clickedItem);
singleDropdown.classList.add('open');
}
e.stopPropagation();
}
解决方案
推荐阅读
- java - 将带有阿拉伯字符的字符串转换为日期
- java - 将对象传递给事件
- javascript - 页面重新加载不要求重新提交表单
- duplicates - 从多个 Coverity 运行中删除重复的结果
- c - 为什么我的静态变量在运行时会不对齐?
- git - 我有一个项目/文件夹的两个 .git 目录,如何重命名工作树中的文件?
- sqlite - SQLite C API 等效于 typeof(col)
- mxgraph - 如何将新属性添加到自定义边缘形状
- java - 如何使用 Selenium 和 Java 单击文本为 Ok 的元素
- node.js - 使用带有 multer 中间件的 axios post 发送文件时服务器响应“未定义”