java script部分函数如下: <script language="javascript">    
  function test(int i){
var li = document.getElementById('img_'+i);//获取菜单id
li.style.display = "none";//隐藏菜单项
}
</script>
jsp页面中调用部分如下,红色部分应该怎么写:                                               <%
for (int i = 0; i < authoritys.size(); i++){
Authority au = authoritys.get(i);
                                                                //如果菜单标记为0,隐藏菜单项
if(au.getMenuFlag()==0){
%>
<script language="javascript"> 
    test(i);                                               </script>

         <%
}
}
%>
菜单为树形菜单,隐藏的为<li>部分,求大拿指教~

解决方案 »

  1.   

    <script language="javascript">   
    function test(i){
      var li = document.getElementById('img_'+i);//获取菜单id
      li.style.display = "none";//隐藏菜单项
    }
    </script> 
    <script language="javascript"> 
     <%
    for (int i = 0; i < authoritys.size(); i++){
      Authority au = authoritys.get(i);
      if(au.getMenuFlag()==0){
    %>
    test(<%=i%>);
    <%
      }
    }
    %>
    </script>
      

  2.   

    <script language="javascript">
    //alert("test!!!!!!!!!");
     <%
    for (int i = 0; i < authoritys.size(); i++){
      Authority au = authoritys.get(i);
      if(au.getMenuFlag()==0){
    %>
    alert("test!!!!!!!!!");
    test(<%=i%>);
    <%
      }
    }
    %>
    alert("test!!!!!!!!!");
    </script>我把这部分代码放在body中,为什么执行不到test(),红色部分测试能alert,绿色部分却不行,为什么?
      

  3.   

    在JSP中可以用out.print<%
    for (int i = 0; i < authoritys.size(); i++){
    Authority au = authoritys.get(i);
       //如果菜单标记为0,隐藏菜单项
    if(au.getMenuFlag()==0){ out.print("<script language=\"javascript\">test("+i+");</script>"); }
    }
    %>
      

  4.   

    红色在循环外!绿色在循环内!java代码先于javascript代码执行!你这种思路是错的!要在HTML元素上绑定事件
      

  5.   


    按你说的做了,调用不到script中的test(),在test()中alert测试不行~
      

  6.   

    <%
    //检查session,获取登录用户
    Admin a = (Admin) session.getAttribute("admin");
    String roleName = a.getAdminType();
    %>

    <%
    List<Authority> authoritys = new ArrayList<Authority>();
    int totalRecords = Authority.getAuthoritys2(authoritys, 1, 9, roleName);
    %>

    <%
    for (int i = 0; i < authoritys.size(); i++){
        Authority au = authoritys.get(i);
          //如果菜单标记为0,隐藏菜单项
        if(au.getMenuFlag()==1){
            out.print("<script language=\"javascript\">test("+i+");</script>");
        }
    }
    %>
    获取登录用户的角色类型,从数据库中获取该角色的菜单信息,检查该角色的菜单标记,为0则隐藏这个菜单,for中的i和<li id="img_i">中的i对应,隐藏的都是一级菜单,这样二级菜单也会隐藏~
      

  7.   

    不涉及安全因素的话可以这样!先打印出来li.销作修改:
    <ul id="menu">
    <li id="img_1" class="h0">
    <li id="img_2" class="h1">
    <li id="img_3" class="h0">
    <li id="img_4" class="h1">
    <li id="img_5" class="h0">
    ...
    </menu>
    class=h0的用作隐藏标记,h1的显示.然后用JS把li有h0值的display:none; 我用jquery来写
    $("#menu li[class='h0']").css("display","none");
      

  8.   

    示例代码:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <script type="text/javascript" charset="UTF-8" src="system/js/jquery.js"></script>
    <title>Untitled Document</title>
    </head><body>
    <ul id="menu">
    <li id="img_1" class="h0">1</li>
    <li id="img_2" class="h1">2</li>
    <li id="img_3" class="h0">3</li>
    <li id="img_4" class="h1">4</li>
    <li id="img_5" class="h0">5</li>
    </ul>
    <script type="text/javascript">
    $(document).ready(function(){
    $("#menu li[class='h0']").css("display","none");
    });</script>
    </body>
    </html>
      

  9.   

    就是因为涉及到权限问题,才这样做的,直接隐藏的话在<li>中改下style就行啦~
      

  10.   

    哪你因该把这部分信息封装在用户类里呀!你不会是JSP->DB的模式吧
      

  11.   

    哎,就是因为涉及到权限问题,我才不能直接隐藏,你可能理解错我的意思了,文字有歧义我说的做法是不能直接改<li>的style,直接改的话就和你的示例一样了