本帖最后由 sayfree 于 2012-04-15 22:19:02 编辑

解决方案 »

  1.   

    //调用时需要向f1函数传递this参数:
    //<input type="checkbox" name="checkbox2" value="checkbox"  onclick="f1(this)"/>
    function f1(obj) {
    var chks = obj.parentNode.parentNode.getElementsByTagName('input'); //当前大类下所有小类复选框集合
    var tr = obj.parentNode.parentNode.parentNode.parentNode.parentNode;
    var tmp = tr.previousSibling;
    while (tmp.nodeType != 1) {
    tmp = tmp.previousSibling;
    }
    var c = tmp.getElementsByTagName('input')[0]; //大类复选框

    var counter = 0;
    for (var i = 0; i < chks.length; i ++) {
    if (chks[i].checked == false) counter ++;
    }
    if (counter == chks.length) c.checked = false;
    }
      

  2.   

    关键在于节点的访问,如果你在循环输出表格数据的时候给所有的checkbox元素加上类属性,比如外层元素class="chk_<%=i%>",内层的元素class="chk_<%=i%>_<%=j%>",然后在查找的时候就可以先获取所有的input元素,然后通过class属性来筛查需要的元素,尽管效率低一些,但逻辑上更加清晰。否则就只能通过元素的祖先节点、兄弟节点来进行查找定位,比较容易出错。再加上你没有给出生成的html代码,所以没办法进行测试,也不知道1楼的代码能不能达到预期目的。。