禁用一组基于“禁用”的复选框;数据属性“;并禁用属性

Disable a group of checkboxes based on "Data attributes" and disabled-attribure

本文关键字:复选框 数据属性 属性 一组 禁用      更新时间:2023-09-26

我有以下一组复选框:

<input class="lvl" type="checkbox" data-groupid="1" data-multichoice="1" checked />
<input class="lvl" type="checkbox" data-groupid="1" data-multichoice="1" />
<input class="lvl" type="checkbox" data-groupid="1" data-multichoice="1" />
<br />
<input class="lvl" type="checkbox" data-groupid="2" data-multichoice="0" />
<input class="lvl" type="checkbox" data-groupid="2" data-multichoice="0" />
<input class="lvl" type="checkbox" data-groupid="2" data-multichoice="0" checked />
<input class="lvl" type="checkbox" data-groupid="2" data-multichoice="0" />
<br />
<input class="lvl" type="checkbox" data-groupid="3" data-multichoice="1" />
<input class="lvl" type="checkbox" data-groupid="3" data-multichoice="1" checked />
<input class="lvl" type="checkbox" data-groupid="3" data-multichoice="1" />
<input class="lvl" type="checkbox" data-groupid="3" data-multichoice="1" />
<br />
<input class="lvl" type="checkbox" data-groupid="4" data-multichoice="0" />
<input class="lvl" type="checkbox" data-groupid="4" data-multichoice="0" />
<input class="lvl" type="checkbox" data-groupid="4" data-multichoice="0" />
<input class="lvl" type="checkbox" data-groupid="4" data-multichoice="0" />

我需要禁用所有具有class="lvl"data-multichoice="0"IF的复选框此组中已经选中了一个复选框。因此,将上述场景转换为:

<input class="lvl" type="checkbox" data-groupid="1" data-multichoice="1" checked />
<input class="lvl" type="checkbox" data-groupid="1" data-multichoice="1" />
<input class="lvl" type="checkbox" data-groupid="1" data-multichoice="1" />
<br />
<input class="lvl" type="checkbox" data-groupid="2" data-multichoice="0" disabled />
<input class="lvl" type="checkbox" data-groupid="2" data-multichoice="0" disabled />
<input class="lvl" type="checkbox" data-groupid="2" data-multichoice="0" checked />
<input class="lvl" type="checkbox" data-groupid="2" data-multichoice="0" disabled />
<br />
<input class="lvl" type="checkbox" data-groupid="3" data-multichoice="1" />
<input class="lvl" type="checkbox" data-groupid="3" data-multichoice="1" checked />
<input class="lvl" type="checkbox" data-groupid="3" data-multichoice="1" />
<input class="lvl" type="checkbox" data-groupid="3" data-multichoice="1" />
<br />
<input class="lvl" type="checkbox" data-groupid="4" data-multichoice="0" />
<input class="lvl" type="checkbox" data-groupid="4" data-multichoice="0" />
<input class="lvl" type="checkbox" data-groupid="4" data-multichoice="0" />
<input class="lvl" type="checkbox" data-groupid="4" data-multichoice="0" />

有什么想法吗?

试试这个

$('.lvl[data-multichoice="0"]').not(':checked').prop('disabled', true);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input class="lvl" type="checkbox" data-groupid="1" data-multichoice="1" checked />
<input class="lvl" type="checkbox" data-groupid="1" data-multichoice="1" />
<input class="lvl" type="checkbox" data-groupid="1" data-multichoice="1" />
<br />
<input class="lvl" type="checkbox" data-groupid="2" data-multichoice="0" />
<input class="lvl" type="checkbox" data-groupid="2" data-multichoice="0" />
<input class="lvl" type="checkbox" data-groupid="2" data-multichoice="0" checked />
<input class="lvl" type="checkbox" data-groupid="2" data-multichoice="0" />
<br />
<input class="lvl" type="checkbox" data-groupid="3" data-multichoice="1" />
<input class="lvl" type="checkbox" data-groupid="3" data-multichoice="1" checked />
<input class="lvl" type="checkbox" data-groupid="3" data-multichoice="1" />
<input class="lvl" type="checkbox" data-groupid="3" data-multichoice="1" />

上面的答案是正确的,这只是在所有输入都未选中时重新启用该组所有输入的另一种方法。

$(document).ready(function(){
    var $inputs = $(".lvl");
    function checkInput(){
        if( $('.lvl[data-groupid="2"]:checked').length > 0) {
            $('.lvl[data-groupid="2"]').not(':checked').prop('disabled', true);
        } else {
            $('.lvl[data-groupid="2"]').not(':checked').prop('disabled', false);
        }
    }
    // watch input change event
    $inputs.change(function() {
        checkInput();
    });
    // check inputs on DOM ready
    checkInput();
});

编辑

根据建议,如果您希望每组有一个选项,则可能需要使用Radios。这将使你的收音机像复选框一样,并切换属性为的收音机的状态

data-multichoice='0'如果存在已选中的复选框在该组中

    var $inputs = $(".lvl");
    $inputs.click(function() {
        var previousValue = $(this).attr('previousValue');
        // Make radios act like checkbox for same group
        var inputGroup = $("input[name="+ $(this).attr('name') +"]:radio");
        // Toggle Disable attr for radios of same group + data-multichoice="0"
        var targerGroup = $("input[name="+ $(this).attr('name') +"][data-multichoice='0']:radio");
        if (previousValue == 'checked')
        {
            $(this).removeAttr('checked');
            $(this).attr('previousValue', false);
            targerGroup.not(':checked').prop('disabled', false);
        }
        else
        {
            inputGroup.attr('previousValue', false);
            $(this).attr('previousValue', 'checked');
            targerGroup.not(':checked').prop('disabled', true);
        }
    });
 <input class="lvl" type="radio" name="group1"  data-groupid="1" data-multichoice="1" checked />
 <input class="lvl" type="radio" name="group1"  data-groupid="1" data-multichoice="1" />
 <input class="lvl" type="radio" name="group1"  data-groupid="1" data-multichoice="1" />
 <input class="lvl" type="radio" name="group2"  data-groupid="2" data-multichoice="0" disabled />
 <input class="lvl" type="radio" name="group2"  data-groupid="2" data-multichoice="0" disabled />
 <input class="lvl" type="radio" name="group2"  data-groupid="2" data-multichoice="0" checked />
 <input class="lvl" type="radio" name="group2"  data-groupid="2" data-multichoice="0" disabled />
 <input class="lvl" type="radio" name="group3"  data-groupid="3" data-multichoice="1" />
 <input class="lvl" type="radio" name="group3"  data-groupid="3" data-multichoice="1" checked />
 <input class="lvl" type="radio" name="group3"  data-groupid="3" data-multichoice="1" />
 <input class="lvl" type="radio" name="group3"  data-groupid="3" data-multichoice="1" />
 <input class="lvl" type="radio" name="group4"  data-groupid="4" data-multichoice="0" />
 <input class="lvl" type="radio" name="group4"  data-groupid="4" data-multichoice="0" />
 <input class="lvl" type="radio" name="group4"  data-groupid="4" data-multichoice="0" />
 <input class="lvl" type="radio" name="group4"  data-groupid="4" data-multichoice="0" />