学了7天js,写了一个可折叠菜单:
大家一看就应该知道我要的效果,但是为什么只有第一个菜单生效呢?
1、请大师们指点一下!
2、要实现这样的效果,更好的js写法是怎样的(多注释,新手感激!)?
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>可折叠菜单</title>
</head><body>
<script>
window.onload = menu;
function menu(){
var nav=document.getElementById("nav");
var links=nav.getElementsByTagName("a");
for(var i=0; i<links.length; i++){
if(links[i].className == "ulia"){
links[i].onclick=function(){
var ul=nav.getElementsByTagName("ul");
for(var j=0; j<ul.length; j++){
var ulul=ul[j].getElementsByTagName("ul")[0];
if(ulul.style.display == "block" || ulul.style.display == ""){
ulul.style.display = "none";
}else{
ulul.style.display = "block";
}
}
}
return false;
}
}
}
</script>
<nav id="nav">
<ul>
<li>
<a href="#" class="ulia">AAAAAA</a>
<ul>
<li><a href="#">aaaa</a></li>
<li><a href="#">aaaaaa</a></li>
<li><a href="#">aaaaaa</a></li>
</ul>
</li>
<li>
<a href="#" class="ulia">BBBBB</a>
<ul>
<li><a href="#">bbbbbb</a></li>
<li><a href="#">bbb</a></li>
<li><a href="#">bbbbbbb</a></li>
</ul>
</li>
</ul>
</nav>
</body>
</html>
大家一看就应该知道我要的效果,但是为什么只有第一个菜单生效呢?
1、请大师们指点一下!
2、要实现这样的效果,更好的js写法是怎样的(多注释,新手感激!)?
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>可折叠菜单</title>
</head><body>
<script>
window.onload = menu;
function menu(){
var nav=document.getElementById("nav");
var links=nav.getElementsByTagName("a");
for(var i=0; i<links.length; i++){
if(links[i].className == "ulia"){
links[i].onclick=function(){
var ul=nav.getElementsByTagName("ul");
for(var j=0; j<ul.length; j++){
var ulul=ul[j].getElementsByTagName("ul")[0];
if(ulul.style.display == "block" || ulul.style.display == ""){
ulul.style.display = "none";
}else{
ulul.style.display = "block";
}
}
}
return false;
}
}
}
</script>
<nav id="nav">
<ul>
<li>
<a href="#" class="ulia">AAAAAA</a>
<ul>
<li><a href="#">aaaa</a></li>
<li><a href="#">aaaaaa</a></li>
<li><a href="#">aaaaaa</a></li>
</ul>
</li>
<li>
<a href="#" class="ulia">BBBBB</a>
<ul>
<li><a href="#">bbbbbb</a></li>
<li><a href="#">bbb</a></li>
<li><a href="#">bbbbbbb</a></li>
</ul>
</li>
</ul>
</nav>
</body>
</html>
解决方案 »
- jquery toggle怎么只能执行一个ajax请求啊??
- 在线等,请教问题
- jquery 超级select插件 v3.2.0.0版本 支持汉字、头写拼音、英文快速定位查询的超级select插件。可方向键、tab 键快速选择.
- javascript 数学小问题
- 请教,关于javascript操作XML
- 关于淘宝浮动导航如何实现的
- 急,寻高手……如何用javascript编写一个只要内容改变就触发某个函数的对话框?
- 参数传递的问题
- 怎么判断页面上的一张图片的宽度或高度是否超过A4的宽或高?
- 有什么办法可以使表格的变框着颜色后变得细细的并可见?
- JS控制页面宽度
- 如何在自定义的基类JS里扩展一个过滤特殊字符的方法?
错误依旧,
<nav id="nav">
<ul>
<li>
<a href="#" class="ulia">BBBBB</a>
<ul>
<li><a href="#">bbbbbb</a></li>
<li><a href="#">bbb</a></li>
<li><a href="#">bbbbbbb</a></li>
</ul>
</li>
<li>
<a href="#" class="ulia">AAAAAA</a>
<ul>
<li><a href="#">aaaa</a></li>
<li><a href="#">aaaaaa</a></li>
<li><a href="#">aaaaaa</a></li>
</ul>
</li> </ul>
</nav>
function menu(){
var nav=document.getElementById("nav");
var links=nav.getElementsByTagName("a");
for(var i=0 , k = 0; i<links.length; i++){
if(links[i].className == "ulia"){
links[i].onclick=function(_k){
return function(){
var ul=nav.getElementsByTagName("ul");
for(var j=0; j<ul.length; j++){
var ulul=ul[j].getElementsByTagName("ul")[_k];
if(ulul.style.display == "block" || ulul.style.display == ""){
ulul.style.display = "none";
}else{
ulul.style.display = "block";
}
}
}
}(k);
++k;
}
}
}
function menu(){
var nav=document.getElementById("nav");
var links=nav.getElementsByTagName("a");
for(var i=0; i<links.length; i++){
if(links[i].className == "ulia"){
links[i].onclick=function(){
// 这里应该取当前这个<a>下面的<ul>
// 这个循环完全是没必要的,而且逻辑错误
var ul=nav.getElementsByTagName("ul");
for(var j=0; j<ul.length; j++){
var ulul=ul[j].getElementsByTagName("ul")[0];
if(ulul.style.display == "block" || ulul.style.display == ""){
ulul.style.display = "none";
}else{
ulul.style.display = "block";
}
}
}
// return false; // 这行应该去掉, 否则只会绑定第1个ulia的事件
}
}
}<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>MENU</title>
</head><body>
<script>
window.onload = menu;
function menu(){
var nav=document.getElementById("nav");
var links=nav.getElementsByTagName("a");
for(var i=0; i<links.length; i++){
if(links[i].className == "ulia"){
links[i].onclick=function(){
var ul=this.parentNode.getElementsByTagName("ul")[0];
if(ul.style.display == "block" || ul.style.display == ""){
ul.style.display = "none";
}else{
ul.style.display = "block";
}
}
}
}
}
</script>
<nav id="nav">
<ul>
<li>
<a href="#" class="ulia">AAAAAA</a>
<ul>
<li><a href="#">aaaa</a></li>
<li><a href="#">aaaaaa</a></li>
<li><a href="#">aaaaaa</a></li>
</ul>
</li>
<li>
<a href="#" class="ulia">BBBBB</a>
<ul>
<li><a href="#">bbbbbb</a></li>
<li><a href="#">bbb</a></li>
<li><a href="#">bbbbbbb</a></li>
</ul>
</li>
</ul>
</nav>
</body>
</html>
<li>
<a href="#">AAAAAA</a>
<ul>
<li><a href="#">aaaa</a></li>
<li><a href="#">aaaaaa</a></li>
<li><a href="#">aaaaaa</a></li>
</ul>
</li>
<li>
<a href="#">BBBBB</a>
<ul>
<li><a href="#">bbbbbb</a></li>
<li><a href="#">bbb</a></li>
<li><a href="#">bbbbbbb</a></li>
</ul>
</li>
</ul>
<script type="text/javascript">
window.onload = menu;
function menu(){
var nav=document.getElementById("nav");
var li=nav.getElementsByTagName("li");
for(var i=0; i<li.length; i++){
li[i].onclick=function(){
var ul=this.getElementsByTagName("ul")[0];//使用this避免使用闭包
if(ul.style.display == "none"){
ul.style.display = "block";
}else{
ul.style.display = "none";
}
}
}
}
//不建议查class,a本身有链接行为,应该点li来控制菜单,结构应该尽量简单。
</script>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>可折叠菜单</title>
</head>
<body>
<script>
function aaa(a)
{
var li = a.parentNode;
var ul = li.getElementsByTagName("ul");
if(ul[0].style.display == "none"){
ul[0].style.display = "block";
}
else{
ul[0].style.display = "none";
}
}
</script>
<nav id="nav">
<ul>
<li>
<a onclick="aaa(this)" class="ulia">AAAAAA</a>
<ul>
<li><a href="#">aaaa</a></li>
<li><a href="#">aaaaaa</a></li>
<li><a href="#">aaaaaa</a></li>
</ul>
</li>
<li>
<a onclick="aaa(this)" class="ulia">BBBBB</a>
<ul>
<li><a href="#">bbbbbb</a></li>
<li><a href="#">bbb</a></li>
<li><a href="#">bbbbbbb</a></li>
</ul>
</li>
</ul>
</nav>
</body> 这样写比较简单点,只是折叠的话循环没必要的