先跑一下程序再回答把,可以把下面2句注释掉,不是下面2句的问题
else 
menu.style.display="none"; 

解决方案 »

  1.   

    我本来是想做个无限展开的菜单,用来显示目录树的
    前面还这样作过
    <html>
    <head>
    <script>
    function pop(i)
    {
    var menu = document.getElementsByTagName("ul");
    var len = document.getElementsByTagName("ul").length;
    var k = len - i;
    if(menu[k].style.display=="none")
    menu[k].style.display="block";
    else
    menu[k].style.display="none";
    //var len = document.getElementsByTagName("ul").length;
    var html = "";
    for(var j = 2; j >= 1; j--)
    {
    html = html + "<li onClick='pop(" + (i + j - 1) + ")'>123</li><ul style='display:none'></ul>";
    }
    menu[k].innerHTML = html;
    }
    </script>
    </head>
    <body>
    <ul><%
    for(int i = 3; i >= 1; i--)
    {
    %>
    <li onClick="pop(<%=i%>)"><%=i%><script>document.write(document.getElementsByTagName("ul").length);</script></li>
    <ul style="display:none">
    </ul>
    <%}%></ul>
    </body>
    </html>由于参数关系复杂,没成功,放弃了.任何人能把2个程序之一首先修改成功都可以得50分
      

  2.   

    问题的本质在于你点击了子菜单后由于冒泡事件响应机制
    又调用了一遍根节点的pop事件,所以点不下去了只要在function pop(id)中加一句event.cancelBubble = true;即可function pop(id) 

    event.cancelBubble = true;
    var menu = document.getElementById(id); if(menu.style.display=="none") 
    menu.style.display="block"; 
    else 
    menu.style.display="none"; var html = ""; 
    var id2 = ""; 
    for(var j = 1; j  <= 2; j++) 

    id2 = id + j; 
    html += " <li onclick=pop('"+id2+"')>123</li ><ul id='"+id2+"' style='display:none'> </ul >"; 

    menu.innerHTML = html; 
    //document.write(id2);