Javascript 多级下拉菜单

标签 javascript html css

HTML代码:

<ul class="nav-menu">   
<li id="no" onmouseover="dropDown()" onmouseout="reverseDropDown()">
    <a href="#" >Birds</a>
    <ul class="menu">
        <li id="no2" ><a href="#" onmouseover="dropDown2()" onmouseout="reverseDropDown2()">Ratites</a>
                <ul class="submenu">
        <li><a href="">Ratites</a></li>
        <li><a href="">Fowl</a></li>
        <li><a href="">Neoaves</a></li>
    </ul>
        </li>
        <li><a href="">Fowl</a></li>
        <li><a href="">Neoaves</a></li>
    </ul>
</li>
    <li id="no" onmouseover="dropDown()" onmouseout="reverseDropDown()">
    <a href="#">Dogs</a>
    <ul class="menu">
        <li><a href="">Big</a></li>
        <li><a href="">Red</a></li>
        <li><a href="">Noizy</a></li>
    </ul>
</li>

CSS 代码:

a {
    color: #06c;
}
ul {
    padding: 0;
    margin: 0;
    background: pink;
    float: left;
}
li {
    float: left;
    display: inline;
    position: relative;
    width: 150px;
    list-style: none;
}

.menu {
    position: absolute;
    left: 0;
    top: 100%;
    background: #ccc;
    display: none;
}

.submenu{
    position: absolute;
    top:0px;
    left:70px;
    background: #ccc;
    display: none;

}

Javascript 代码:

 function dropDown() {
var submenu = document.getElementById('no').getElementsByClassName('menu')[0];



    submenu.style.display="block";

}


function reverseDropDown(){

  var submenu = document.getElementById('no').getElementsByClassName('menu')[0];
    submenu.style.display="none";
}

 function dropDown2() {
    var submenu = document.getElementById('no2').getElementsByClassName('submenu')[0];



        submenu.style.display="block";

    }

function reverseDropDown2(){

  var submenu = document.getElementById('no2').getElementsByClassName('submenu')[0];
    submenu.style.display="none";
}

JSFiddle:http://jsfiddle.net/wkmd7h0r/33/

我想使用 javascript 制作一个多级下拉菜单(不使用 jquery 等库,也不使用 css hover propery 等)。

我试过很多方法,这是最后一个,我无法让它工作。有人可以帮我解释和/或教程。因为我用谷歌搜索了一下,除了使用纯 CSS 或 JQuery 的菜单外找不到任何东西。

谢谢。

最佳答案

首先:您应该真正使用事件处理程序。逻辑与代码分离(将所有 js 移动到外部文件中)。

我对它做了一些修改以反射(reflect)一种可能性(更改了 HTML、JS、CSS):

完整代码在这里 jsFiddle

最重要的是,停止触发父 A 标签:将 onclick 函数放在链接上,而不是父 li。

function dropDown(a) {
    var li = a.parentElement,
        submenu = li.getElementsByTagName('ul')[0];

    submenu.style.display = submenu.style.display == "block" ? "none" : "block";

    return false;
}

关于Javascript 多级下拉菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26784593/

相关文章:

javascript - .Net windows 应用程序 WebBrowser/Google Maps API v3

javascript - Ajax 从 php 获取值?

javascript - 如何将 Canvas 图像数据复制到其他变量?

css - 在 ASP.NET 中将 HTML 转换为 PDF 时保持 CSS 样式

javascript - 注入(inject)两个或多个名称相同但内容不同的模块 - angularJs

javascript - jquery 数据表自定义过滤器

javascript - xml dom解析

javascript - 当我单击添加行按钮时,如何动态地将行添加到 html 中的表单?

html - CSS div 没有分离

css - 如何在不复制库的情况下在 Angular 组件的 CSS 中使用第三方 CSS 库?