js闭包实际应用问题

xiao_song_shu 2017-12-09 10:16:46
最终实现:想做一个类似于下拉菜单的下拉表,先将多个li用css隐藏(即二级菜单),再通过js动态显示。
问 题:刚开始写的时候无论点击哪一个li,只能显示第一个的,网上搜索后决定使用闭包,但是还是失败,以下代码是想用来测试js闭包能否实现的,结果是不行。然后具体的实现代码也是实现不了,所以我就没贴出来了。。。
期 望:能帮我看看代码的错误点,以及二级菜单怎么实现比较好。js新手,所以很多不懂,麻烦各位了。。。。。
...全文
178 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiao_song_shu 2017-12-10
  • 打赏
  • 举报
回复
可以实现,谢谢,剩下的我自己理解一下,谢谢。
天际的海浪 2017-12-10
  • 打赏
  • 举报
回复

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Test</title>
    <style type="text/css">
    #test ul{
        display: none;
    }
    </style>
</head>
<body>
    <ul id="test">  
        <li>这是第一条
        <ul>
            <li>1</li>
            <li>2</li> 
            <li>3</li> 
            <li>4</li> 
        </ul>  
        </li>
        <li>这是第二条
        <ul>
            <li>5</li>
            <li>6</li> 
            <li>7</li> 
            <li>8</li> 
        </ul>  
        </li>
        <li>这是第三条
        <ul>
            <li>9</li>
            <li>10</li> 
            <li>11</li> 
            <li>12</li> 
        </ul>  
        </li>
    </ul>
<script type="text/javascript" src="js/jquery-1.9.1.min.js"></script>
<script type="text/javascript">
$(function(){
	$("#test li:has(ul)").click(function(){
		$(this).children("ul").slideToggle(300);
	});
	$("#test ul").click(false);
});
</script>  
</body>
</html>
2017-12-09
  • 打赏
  • 举报
回复
你的代码呢?
xiao_song_shu 2017-12-09
  • 打赏
  • 举报
回复
这是我初步写的,但是实现不了。。。 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Test</title> <style type="text/css"> .anotherMenu { display: none; } </style> </head> <body> <ul id="test"> <li>这是第一条</li> <li class="anotherMenu" id="anotherMenu"> <ul> <li>1</li> <li>2</li> <li>3</li> <li>4</li> </ul> </li> <li>这是第二条</li> <li class="anotherMenu" id="anotherMenu"> <ul> <li>5</li> <li>6</li> <li>7</li> <li>8</li> </ul> </li> <li>这是第三条</li> <script type="text/javascript" src="js/jquery-1.9.1.min.js"></script> <script type="text/javascript"> function $(currentId) { return document.getElementById(currentId); } var list = $("test").getElementsByTagName("li"); for (var i = 0; i < list.length; i++) { list[i].onclick = (function(x) { return function() { //alert(x); //alert($("#anotherMenu"));显示null //alert(document.getElementById('anotherMenu'));显示object对象 if($("#anotherMenu").css("display")=="none") { //alert(x); $("#anotherMenu").css("display","block"); //alert(1); } else { $("#anotherMenu").css("display","none"); } } })(i); } </script> </body> </html>
xiao_song_shu 2017-12-09
  • 打赏
  • 举报
回复
谢谢,确实这样,另外可以麻烦说一下二级菜单的实现思路吗?或者我贴一下我写的代码?
天际的海浪 2017-12-09
  • 打赏
  • 举报
回复
另外你自定义的function $(id) 函数,与jquery的对象冲突,建议改名
天际的海浪 2017-12-09
  • 打赏
  • 举报
回复
代码没问题,只是要把js代码放到所有html元素的下面
xiao_song_shu 2017-12-09
  • 打赏
  • 举报
回复
不好意思,代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Test</title> <script language="javascript" type="text/javascript" src="../js/jquery-1.9.1.min.js"></script> <script type="text/javascript"> function $(id) { return document.getElementById(id); } var list = $("test").getElementsByTagName("li"); for (var i = 0; i < list.length; i++) { list[i].onclick = (function(x) { return function() { //实现菜单代码 alert(x); } })(i); } </script> <style type="text/css"> .anotherMenu { display: none; } </style> </head> <body> <ul id="test"> <li>这是第一条</li> <li class="anotherMenu" id="anotherMenu"> <ul> <li>1</li> <li>2</li> <li>3</li> <li>4</li> </ul> </li> <li>这是第二条</li> <li class="anotherMenu" id="anotherMenu"> <ul> <li>5</li> <li>6</li> <li>7</li> <li>8</li> </ul> </li> <li>这是第三条</li> </body> </html>

87,904

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧