Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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_Css_Drop Down Menu - Fatal编程技术网

Javascript 如何取消由';悬停子对象';事件选择器?

Javascript 如何取消由';悬停子对象';事件选择器?,javascript,css,drop-down-menu,Javascript,Css,Drop Down Menu,我正在制作一个基于CSS的菜单,当根元素悬停时,子菜单项会弹出。我的问题是,当我单击列表中的某个项目时,我希望CSS菜单关闭,但从技术上讲,我仍然停留在顶部元素上,所以我想我必须使用javascript隐藏菜单。但是当我设置display属性时,我将其设置为永久,并且它将覆盖父节点的悬停选择器。因此子菜单不再显示。 这一定很常见,但我找不到任何答案 非常感谢任何帮助 html: js: 这是您可以尝试的方法 <ul class="level1"> <li>one

我正在制作一个基于CSS的菜单,当根元素悬停时,子菜单项会弹出。我的问题是,当我单击列表中的某个项目时,我希望CSS菜单关闭,但从技术上讲,我仍然停留在顶部元素上,所以我想我必须使用javascript隐藏菜单。但是当我设置display属性时,我将其设置为永久,并且它将覆盖父节点的悬停选择器。因此子菜单不再显示。 这一定很常见,但我找不到任何答案

非常感谢任何帮助

html:

js:

这是您可以尝试的方法


<ul class="level1">
    <li>one
        <ul class="level2">
            <li id="test">two</li>
            <li>three</li>
        </ul>
    </li>
</ul>
.level1 li:hover > ul {
    display: inline;
}

.level2 {
    display: none;
}
document
  .getElementById('test')
  .addEventListener('click',function () {
     this.parentNode.style.display = 'none';
     // After this the menu doesn't open anymore
     // because the style is overriden
});
<ul class="level1">
    <li class="hoverMe">one
        <ul class="level2">
            <li id="test">two</li>
            <li>three</li>
        </ul>
    </li>
</ul>
.hoverMe:hover > ul {
    display: inline;
}
var test = document.getElementById('test');
test.onclick =  function () {
    this.parentNode.parentNode.className = "";
};

var level1 = document.getElementsByClassName('level1')[0];
level1.getElementsByTagName("li")[0].onmouseover =  function () {
    if (this.className != "hoverMe") {
        this.className = "hoverMe";
    }
};