本帖最后由 isun2007 于 2009-09-03 20:35:00 编辑

解决方案 »

  1.   


    不是呀!
    if (hids.length > 0)
    这个不就是条件吗!!!
    而且这个死循环不是正常的死循环!你运行一下,就知道什么意思了。
      

  2.   


    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head>
        <title></title>
        <script type ="text/javascript" language ="javascript">
            function traversing(parentCode) {
                var hids = document.getElementsByName("hid_" + parentCode);
                alert(hids.length);
                if(hids.length==0) break;
                if (hids.length > 0) {
                    alert("即将进入循环!");
                    for (i = 0; i < hids.length; i++) {
                        alert("此时i=" + i);
                        var oTr = hids[i].parentNode.parentNode;
                        alert(oTr.id);
                        var ids = oTr.id.split("_");
                        traversing(ids[1]);
                        alert("出递归" + ids[1]);
                    }
                }
            }
        </script>
    </head>
    <body>
        <table border ="1" cellpadding ="4" cellspacing ="0" width ="90%" align ="center" style="border-collapse:collapse;" ID="Table1">
            <tr id ="tr_1">
               <td style ="cursor:pointer" onclick ="javascript:traversing('1')">
                    --1--ABC::tr_1
               </td>
            </tr>
            <tr id ="tr_2">
                <td>
                    <input type ="hidden" id ="hid_11" name ="hid_1" />
                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--2--DEF1::tr_2
                </td>
            </tr>
            <tr id ="tr_3">
                <td>
                    <input type ="hidden" id ="hid_2" name ="hid_2" />
                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--3--GHI1::tr_3
                </td>
            </tr>
            <tr id ="tr_4">
                <td>
                    <input type ="hidden" id ="hid_12" name ="hid_1" />
                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--2--DEF2::tr_4
                </td>
            </tr>
            <tr id ="tr_5">
                <td>
                    <input type ="hidden" id ="hid_4" name ="hid_4" />
                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--3--GHI2::tr_5
                </td>
            </tr>
            <tr id ="tr_6">
                <td>
                    <input type ="hidden" id ="hid_13" name ="hid_1" />
                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--2--DEF3::tr_6
                </td>
            </tr>
            <tr id ="tr_7">
                <td>
                    <input type ="hidden" id ="hid_6" name ="hid_6" />
                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--3--GHI3::tr_7
                </td>
            </tr>
        </table>
    </body>
    </html>
      

  3.   


    if(hids.length==0) break;
    这里break什么?改成你的代码,我这一运行脚本报错!另外,我已经找到原因了!据我的分析就是因为:for (i = 0; i < hids.length; i++)
    这里的i的作用域不仅仅是for语句块!递归调用的时候i的值混乱赋值所致!!!
    问题已解决,不过还要谢谢你的热心回复!
      

  4.   

    额。是的,for (var i = 0; i < hids.length; i++) 
    刚才在chrome下加那条语句运行正常.没发现原来IE下报错