【问题标题】:Checking and unchecking checkboxes with dynamic ids and class using jquery使用jquery检查和取消选中具有动态ID和类的复选框
【发布时间】:2016-06-12 13:41:09
【问题描述】:

我有一个具有分组的网格,即网格显示组的产品。因此,该结构具有 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>

【问题讨论】:

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


    【解决方案1】:

    您正在调用传入undefined 的函数,因为您正在传递this.class

    onclick="checkUncheckAll(this.class)"
    

    元素没有class 属性(它们确实有className),如果有,你不想传递它的,你想传递元素本身因为您将其用作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;
            }
        }
    }
    

    假设您在“所有”复选框上只有一个类。

    【讨论】:

    • 这行得通。当我点击父复选框时,它的子项被选中,而在取消选中父项时,子项也被取消选中,但是如果我一个一个地检查每个子项,它不会检查父复选框。
    • @Sweetie:是的,你必须单独实现它,处理对单个项目复选框的点击,并根据它们是否都被选中来设置“全部”复选框。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-29
    • 1970-01-01
    相关资源
    最近更新 更多