javascript - 如何将:悬停和单击事件同时添加到元素?
问题描述
当我悬停父元素时,他的孩子出现了。当我单击父元素时,他的孩子也会出现,当我再次单击它时,他的孩子会消失。但是然后(在单击父元素消失的孩子之后)当我悬停父元素时,他的孩子没有出现。为什么?
var parent = document.querySelector('nav > ul > li');
var children = document.querySelector('nav > ul > li > ul');
parent.addEventListener('click', function () {
if (children.style.display == 'block') {
children.style.display = 'none';
} else {
children.style.display = 'block';
}
});
nav > ul > li > ul {
display: none;
}
nav > ul > li:hover ul {
display: block;
}
li {
width: max-content;
}
ul {
padding: 0px;
}
<body>
<nav>
<ul>
<li><a href="#">Parent</a>
<ul>
<li><a href="#">child</a></li>
<li><a href="#">child</a></li>
</ul>
</li>
</ul>
</nav>
</body>
谢谢。
解决方案
单击父级时更容易切换类。
var parent = document.querySelector('nav > ul > li');
var children = document.querySelector('nav > ul > li > ul');
parent.addEventListener('click', function() {
children.classList.toggle("showIt");
});
nav>ul>li>ul {
display: none;
}
nav>ul>li:hover ul {
display: block;
}
li {
width: max-content;
}
ul {
padding: 0px;
}
.showIt {
display: block;
}
<body>
<nav>
<ul>
<li><a href="#">Parent</a>
<ul>
<li><a href="#">child</a></li>
<li><a href="#">child</a></li>
</ul>
</li>
</ul>
</nav>
</body>
推荐阅读
- swift - 存储在 iCloud 中的 Xcode 中 iOS 应用程序的重复且未提交的 Firebase 头文件
- php - 如何在codeigniter中配置统计库
- css - 在 gatsby 中导入 css 的警告
- c# - 通过 Zoho Rest API 在 Zoho CRM 中创建自定义模块
- python - 连接两个预训练模型错误:名称“input_1”在模型中被使用了 2 次
- r - 为相同的列条目产生相同的结果
- javascript - 捕获实时图像并以加密形式存储在数据库中并在 C# 中的页面加载时解密
- c++ - 构造函数中的变量未在此范围内声明 c++
- r - R - 当数据有变量时导出到 xlsx 是一个列表
- kubernetes - 如何在 Kubernetes 中对不受信任的代码进行沙箱处理