注意把函数中的工作变量定义成局部的(s,ChildCount,k,j)
<style>
table {font-size = 9pt}
td {height = 10px}
</style>
<body>
<span id="menus"></span>
<span id="view"></span>
</body>
<script language="JavaScript">/**
 * 基本参数数组,根据具体应用自行扩展
 * 数据可较简单的由服务器端提供
 * 列1:节点层次
 * 列2:节点标题
 * 列3: 父节点
 * 列4: 是否有子节点,1为有,0为无
 * 列5: 作为子节点时的序号
 * 其余自行扩充
 */
tree_ar = new Array(
  new Array(1,"KB0Child","KB",1,1),
  new Array(1,"KB1Child","KB",0,2),
  new Array(2,"KB10Child","KB0Child",0,1),
  new Array(2,"KB11Child","KB0Child",0,2),
  new Array(1,"KB2Child","KB",0,3));menus.innerHTML =maketree("KB");
function maketree(n){
 
  var s = ""; 
  var ChildCount = 0;
 
  //alert("n=" + n);
 
  //找出一个节点有多少个子节点
  for(var i=0;i<tree_ar.length;i++){
  if(tree_ar[i][2]==n){
  ChildCount++;
  }
  }
  //alert("ChildCount= " +ChildCount);
 
  //找出第k个子节点,对这个子节点作maketree操作。
  var k=1;
  while(k<=ChildCount){
  for(var j=0;j<tree_ar.length;j++){
  if(tree_ar[j][4]==k && tree_ar[j][2]==n){
  s +="<div id='"+tree_ar[j][1]+"'>"+tree_ar[j][1]+"";
  s += maketree(tree_ar[j][1]);
  //alert(maketree(tree_ar[j][1]));
  s +="</div>";
 
  k++;
  break;
  }
  }
  //alert(k);
  } 
 
  //alert(s);
  return s;
 } </script>

解决方案 »

  1.   

    基本上正确,只是有2个小地方<style>
    table {font-size = 9pt}
    td {height = 10px}
    </style>
    <body>
    <span id="menus"></span>
    <span id="view"></span>
    </body>
    <script language="JavaScript">/**
     * 基本参数数组,根据具体应用自行扩展
     * 数据可较简单的由服务器端提供
     * 列1:节点层次
     * 列2:节点标题
     * 列3: 父节点
     * 列4: 是否有子节点,1为有,0为无
     * 列5: 作为子节点时的序号
     * 其余自行扩充
     */
    tree_ar = new Array(
      new Array(1,"KB0Child","KB",1,1),
      new Array(1,"KB1Child","KB",0,2),
      new Array(2,"KB10Child","KB0Child",0,1),
      new Array(2,"KB11Child","KB0Child",0,2),
      new Array(1,"KB2Child","KB",0,3));menus.innerHTML =maketree("KB");
    function maketree(n){
     
      s = ""; 
      ChildCount = 0;
      //alert("n=" + n);
      document.write("*" + n + "*<br>");
      //找出一个节点有多少个子节点
      for(i=0;i<tree_ar.length;i++){
      if(tree_ar[i][2]==n){
      ChildCount++;
      }
      }
      //alert("ChildCount= " +ChildCount);
     
      //找出第k个子节点,对这个子节点作maketree操作。
      var k=1;
      while(k<=ChildCount){
    /************你的习惯不好哦,用变量不声明 begin******************/
      for(var j=0;j<tree_ar.length;j++){
    /************你的习惯不好哦,用变量不声明 end******************/
      if(tree_ar[j][4]==k && tree_ar[j][2]==n){
      s +="<div id='"+tree_ar[j][1]+"'>"+tree_ar[j][1]+"";
      s += maketree(tree_ar[j][1]);
      //alert(maketree(tree_ar[j][1]));
      s +="</div>";
     
      k++;
    /************************这个break干嘛使的?删掉********************/
      //break;
    /************************这个break干嘛使的?删掉********************/
      }
      }
      //alert(k);
      } 
     
      //alert(s);
      return s;
     } </script>变量使用前最好声明,这样能够确定它的作用域,否则象现在递归时就用行不正常了。