使用jquery

时间:2016-06-12 13:41:10

标签: javascript jquery asp.net-mvc-3 checkbox nested-checkboxes

我有一个有分组的网格,即网格显示组的产品。因此,该结构具有Group及其子。同样的方式我会有一些其他组和他们的孩子,我在下面绑定。我想检查并取消选中父母点击的整个子列表。

CSHTML
@{
    if (Model.List.Count() > 0)
    {
    <table>
        <tr>
              <input type="checkbox" class="cls@(obj.GroupId)" name="@obj.GroupId" onclick="checkUncheckAll(this.class)" />
            <td>Name</td>
          </tr>
        @foreach (var obj in Model.subList)
        {
            <tr>
                <td>
                    <input type="checkbox" class="cls@(obj.GroupId)" name="@obj.GroupId" /></td>
                </td>
                <td>
                    @obj.Name
                </td>
            </tr>
    </table>
    }
}


<input type="button" value="Save" onclick="PickAllCheckedRows();" />

我一直试图像下面这样做,但没有成功。此外,我想点击保存按钮选择所有已检查的组及其子项。任何帮助都会非常感激。

<script type="text/javascript">
    function checkUncheckAll(sender) {
        alert(sender);
        var chkElements = document.getElementsByClassName('chkItems');
        for (var i = 0; i < chkElements.length; i++) {
            chkElements[i].checked = sender.checked;
        }
    }

  function PickAllCheckedRows() {
}
</script>

1 个答案:

答案 0 :(得分:1)

您正在通过undefined调用您的函数,因为您正在通过this.class

onclick="checkUncheckAll(this.class)"

元素没有class属性(他们确实有className),如果他们有,你不会&#39;想要传递,您希望传递元素本身,因为您将其用作sender.checked

只需从通话中删除.class即可。

如果您尝试在群组中进行所有,那么在获取其他复选框以检查/取消选中时,您需要在该功能中使用className

function checkUncheckAll(sender) {
    var chkElements = document.getElementsByClassName(sender.className);
    // Note ------------------------------------------------^^^^^^^^^^
    for (var i = 0; i < chkElements.length; i++) {
        if (chkElements[i] !== sender) {             // Not strictly necessary I guess, but...
            chkElements[i].checked = sender.checked;
        }
    }
}

假设你只会在&#34; all&#34;复选框。