<!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>
    <title></title>
</head>
<body> <div id="divContainer"></div>  [code=javascript]
  <script type="text/javascript">
 
 function UserPower(id, parentId, title, url)
 {
    this.Id = id;
    this.ParentId = parentId;
    this.Title = title;
    this.URL = url;
 }
 
function ParseDom(content) 

  var newObject = document.createElement("div");
  newObject.innerHTML = content;   
  return newObject.childNodes[0];  
};
 
 function Test()
 {
     var data = 
     [ 
        new UserPower(1, '', '目录1', ''), 
        new UserPower(11, '1', '页面11', 'page11.aspx'),
        new UserPower(12, '1', ' 页面12', 'page12.aspx'),
        new UserPower(2, '', '目录2', ''), 
        new UserPower(21, '2', '页面21', 'page21.aspx'),
        new UserPower(22, '2', ' 页面22', 'page22.aspx'),
     ]; 
  
     var rootNode = document.getElementById("divContainer");
     GreateMenu(data, '', rootNode);      
 }
 function GreateMenu(data, parentNodeId,  parentNode)
{         
    for(i = 0; i < data.length; i++)
    {
        var id = data[i].Id;
        var parentId = data[i].ParentId;   
        var title = data[i].Title;
        var url = data[i].URL;           
        
        if(parentId == parentNodeId)
        {                       
           if(url.length == 0) //Directory
           {
              var newNode = ParseDom("<fieldset><legend>" + title + "</legend></fieldset>");
              parentNode.appendChild(newNode);              GreateMenu(data, id, newNode);                                       
           }              
           else //Page
           {
               var text = "&nbsp;&nbsp;&nbsp;&nbsp;<span>" + title + ":</span><input type='checkbox' value='" + id + "'/>";                    
               parentNode.innerHTML += text;
           }                     
        }
    }

 Test();
 
 </script>
</body>
</html>
[/code]我想生成一个配置页面权限的功能。
但是以上程序只是输出了:目录1,及其下包含的两个页面;
而目录2及其下两个页面没有输出。
我用调试,发现目录1递归完,回来后,没有从data[3]的目录2分支执行下去,而是跳出了整个函数。
看了半天,看不出原因。请指点下。谢谢!

解决方案 »

  1.   

    LZ用的应该是IE浏览器吧
    var data = 
         [ 
            new UserPower(1, '', '目录1', ''), 
            new UserPower(11, '1', '页面11', 'page11.aspx'),
            new UserPower(12, '1', ' 页面12', 'page12.aspx'),
            new UserPower(2, '', '目录2', ''), 
            new UserPower(21, '2', '页面21', 'page21.aspx'),
            new UserPower(22, '2', ' 页面22', 'page22.aspx'),
         ];
    你把new UserPower(22, '2', ' 页面22', 'page22.aspx'),后面那个逗号去了。
    效果图
      

  2.   

    找到原因了,忘记打var
    for(i = 0; i < data.length; i++)
    改为
    for(var i = 0; i < data.length; i++)
      

  3.   

    確實是 i 的原因,未加var,變成全域變量了