Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当用户使用Javascript在外部单击时关闭下拉菜单_Javascript_Html_Css - Fatal编程技术网

当用户使用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'))