一个复选框,用于选择由CheckBoxFor生成的所有复选框

时间:2018-10-04 20:34:27

标签: javascript jquery asp.net-mvc checkbox html-helper

我正在使用CheckBoxFor创建一堆复选框的形式。我已经向这些复选框添加了一个类,但是由于CheckBoxFor并未将该类添加到隐藏的错误复选框中,因此我无法基于此选择这些生成的复选框的组。

这是生成的复选框表的示例。当我点击“全选”复选框(最上面的一个)时,我希望选中该列中的所有复选框。 我不希望整个表格都被选中enter image description here

一些相关的HTML:

<td><input type="checkbox" name="selectAll" value="NBTC" /></td>
<td><input type="checkbox" name="selectAll" value="Contractors" /></td>
<td><input type="checkbox" name="selectAll" value="Coordinators" /></td>
<td><input type="checkbox" name="selectAll" value="NGO" /></td>
<td><input type="checkbox" name="selectAll" value="Public" /></td>

我正在使用的CheckBoxFor语句的示例:

@Html.CheckBoxFor(m => m.NBTCGroup.NBTC_FA_Centroid, new {@class = "NBTC"}

这是我正在使用的JS,但是由于它是基于类进行选择的,因此无法选择和取消选择所有内容,因为错误的复选框没有添加类。

$(document).ready(function () {
    $('input[name="selectAll"]').click(function () {
    var source = $(this);
    var sourceName = $(this).val();
    if (sourceName == 'NBTC') {
        var checkboxes = document.querySelectorAll('input[class="NBTC"]');
    }
    else if (sourceName == 'Contractors') {
        var checkboxes = document.querySelectorAll('input[class="Contractors"]');
    }
    else if (sourceName == 'Coordinators') {
        var checkboxes = document.querySelectorAll('input[class="Coordinators"]');
    }
    else if (sourceName == 'NGO') {
        var checkboxes = document.querySelectorAll('input[class="NGO"]');
    }
    else if (sourceName == 'Public') {
        var checkboxes = document.querySelectorAll('input[class="Public"]');
    }
    for (var i = 0; i < checkboxes.length; i++) {
        if (checkboxes[i] != source)
            checkboxes[i].checked = source.checked;
        }
    });

有人对此有其他想法吗?

1 个答案:

答案 0 :(得分:1)

从您的代码中,我假设您正在向每个复选框组添加NBTCContractors等类,对于每个组,您还具有多个selectAll复选框。

您可以这样更改jQuery:

$('input[name="selectAll"]').click(function() {
    var className = $(this).val(); // <-- get the group: NBTC, Contractors, etc
    $('.' + className).prop('checked', this.checked);
    // generates something like this: $('.NBTC').prop('checked', this.checked);
});

我已将this answer用于检查/取消检查逻辑。