当用户使用Javascript在外部单击时关闭下拉菜单
我试图创建下拉菜单,点击打开。这是通过将当用户使用Javascript在外部单击时关闭下拉菜单,javascript,html,css,Javascript,Html,Css,我试图创建下拉菜单,点击打开。这是通过将.active类添加到.dropdown触发器中来完成的。单击基本上显示菜单的类元素。到目前为止,一切正常,但我真的不明白当用户单击打开的菜单之外的任何地方时,如何关闭打开的下拉菜单。到目前为止,我的代码如下所示: document.querySelectorAll(“.dropdown trigger.on click”).forEach(函数(elem){ 元素addEventListener(“单击”,函数(){ this.classList.to
.active
类添加到.dropdown触发器中来完成的。单击基本上显示菜单的类元素。到目前为止,一切正常,但我真的不明白当用户单击打开的菜单之外的任何地方时,如何关闭打开的下拉菜单。到目前为止,我的代码如下所示:
document.querySelectorAll(“.dropdown trigger.on click”).forEach(函数(elem){
元素addEventListener(“单击”,函数(){
this.classList.toggle(“活动”);
})
})
。下拉列表{
显示:内联块;
位置:相对位置;
}
.下拉菜单.下拉菜单{
显示:无;
位置:绝对位置;
-moz盒阴影:0 2px4pRGBA(0,0,0,0.15);
-webkit盒阴影:0 2px4pRGBA(0,0,0,0.15);
盒影:0.2px4pRGBA(0,0,0,0.15);
宽度:自动;
边框:1px实心rgba(0,0,0,0.15);
边界半径:var(--边界半径);
背景色:#ffffff;
z指数:1;
}
.下拉菜单.下拉菜单{
填充:0;
保证金:0;
}
.下拉菜单.下拉菜单ul>li{
列表样式:无;
保证金:0;
}
.dropdown.dropdown menu ul>li.dropdown-menu-content{
填充:0.6rem 1.2rem;
空白:nowrap;
}
.下拉菜单.下拉菜单ul>li.下拉菜单-分频器{
高度:1px;
背景色:rgba(0,0,0,0.05);
}
.下拉菜单.下拉菜单ul>li>a{
显示:块;
文字装饰:无;
填充:0.6rem 1.2rem;
颜色:rgba(0,0,0,0.8);
光标:指针;
空白:nowrap;
最小宽度:12雷姆;
}
.下拉菜单.下拉菜单ul>li>a:悬停{
背景色:rgba(0,0,0,0.025);
}
.dropdown.dropdown-trigger.on-click.active+.下拉菜单{
显示:块;
}
拿起你的武器
-
武器
选择你的班级
-
班级
这将在文档中添加一个单击按钮,检查按钮是否被单击。如果没有,它将检查是否有活动下拉列表,并使其处于非活动状态
document.addEventListener('click', function (event) {
// Return if clicking on trigger
if (event.target.matches('.dropdown-trigger')) {
return;
}
document.querySelectorAll(".dropdown-trigger.active").forEach(function(elem) {
elem.classList.remove('active');
})
}, false);
这将在文档中添加一个单击按钮,检查按钮是否被单击。如果没有,它将检查是否有活动下拉列表,并使其处于非活动状态
document.addEventListener('click', function (event) {
// Return if clicking on trigger
if (event.target.matches('.dropdown-trigger')) {
return;
}
document.querySelectorAll(".dropdown-trigger.active").forEach(function(elem) {
elem.classList.remove('active');
})
}, false);
当你解决问题时,不要忘记在关闭下拉列表时删除你的事件侦听器。你不希望这些东西挂起…当你解决问题时,可能会出现重复,不要忘记在关闭下拉列表时删除事件侦听器您不希望这些东西挂起…这可以工作,但即使在菜单中单击,菜单也会关闭。有什么方法可以用您的实现来解决这个问题吗?您可以更新返回条件以检查下拉列表中的li
或a
:如果(event.target.matches('.dropdown trigger')| event.target.matches('li,a'))
这是有效的,但即使在菜单中单击,菜单也会关闭。有什么方法可以用您的实现解决这个问题吗?您可以更新返回条件以检查下拉列表中的li
或a
:if(event.target.matches('.dropdown trigger')| event.target.matches('li,a'))