j查询根据复选框选择启用/禁用复选框


jQuery enable/disable checkbox based on checkbox selection

EDIT:我应该解释一下,根据用户从第一组中选择的内容,第二组复选框仅启用一些 - 如果用户选择第一个复选框,则启用第二组中的第二个复选框,而如果他们选择第一组中的第二个框,则启用第二组中的另一组复选框。 抱歉,应该解释得更清楚。

我有两个系列的复选框,如下所示:

<input class="oDiv" type="checkbox" value="1" />
<input class="oDiv" type="checkbox" value="2" />
<input disabled="disabled" class="Spec" type="checkbox" value="1" />
<input disabled="disabled" class="Spec" type="checkbox" value="2" />
<input disabled="disabled" class="Spec" type="checkbox" value="5" /> 
<input disabled="disabled" class="Spec" type="checkbox" value="8" /> 
<input disabled="disabled" class="Spec" type="checkbox" value="10" />  
<input disabled="disabled" class="Spec" type="checkbox" value="30" />

我有一些jQuery代码,可以根据选择启用第二组复选框:

$('.oDiv').on('click', function() {
var select = $(this).val();
 if(select==1){
    $('.Spec:eq(1)').prop('disabled', false);
 }
     else{$('.Spec').prop('disabled', true);}
});

现在,发生的情况是,当用户选择 1 时,第二个列表中的正确复选框已启用,但当用户单击关闭时,它不会禁用。

js小提琴:http://jsfiddle.net/pvSeL/

因此,我试图实现的是当用户选中复选框时,相关项被启用,当他们取消选中复选框时,它们将被禁用。

如果要

根据另一个复选框的选中状态切换复选框,

$('.oDiv').on('click', function() {
    var select = $(this).val();
     if(select==1) {
        $('.Spec:eq(4)').prop('disabled', !$(this).is(':checked'));
     }
});

js小提琴


要概括此过程,您可以执行以下操作:

$('.oDiv').on('click', function () {
    var enable = {
        1: [1, 2, 30],
        2: [5, 8, 10]
    };
    var val = $(this).val();
    var checked = $(this).is(':checked');
    enable[val] && enable[val].forEach(function (v) {
        console.log( $('.Spec[value="' + v + '"]'));
        $('.Spec[value="' + v + '"]')
            .prop('disabled', !checked);
    });
});

js小提琴

val()将始终在代码中返回1,因为它从元素获取value属性,无论它是否被选中/选择。您可以使用本机 DOM 元素的 checked 属性来执行此操作:

$('.oDiv').on('click', function () {
    if (this.checked) {
        $('.Spec:eq(1)').prop('disabled', false);
    } else {
        $('.Spec').prop('disabled', true);
    }
});

你也可以在jQuery中使用:checked选择器。

更新的小提琴


如果我只想在第一个复选框为 1 时启用第二组复选框的选择,如果复选框为 2,则启用另一组复选框,这将如何工作?

您需要设置一些逻辑,以便在单击其中任何一个复选框时检查这两个复选框的状态。像这样:

$('.oDiv').on('click', function () {
    var $checkboxes = $('.oDiv');
    $('.Spec').prop('disabled', true);
    if ($checkboxes.eq(0).prop('checked') && $checkboxes.eq(1).prop('checked')) {
        $('.Spec').eq(1).prop('disabled', false);
    }
    else if ($checkboxes.eq(0).prop('checked')){
        $('.Spec').eq(2).prop('disabled', false);
    } 
    else if ($checkboxes.eq(1).prop('checked')){
        $('.Spec').eq(3).prop('disabled', false);
    } 
});

示例小提琴

对于复选框,val() 将始终返回复选框的值,即选中复选框并发布表单时将提交的值。要检查复选框是否处于选中状态,请使用

$(this).prop('checked')

$(this).is(':checked')

或者只是

this.checked

另请参阅 http://jquery-howto.blogspot.nl/2013/02/jquery-test-check-if-checkbox-checked.html 以获取更多信息和有用的技巧。

我有点努力弄清楚你想做什么。但我想你可能想做这样的事情:

$('.oDiv').on('click', function () {
    var select = this.value; // get the value of the element clicked
    $('.Spec')
        .prop('disabled', true) // disable all .Spec checkboxes
        .eq(select)             // look at the checkbox with the position given
                                // by select
            .prop('disabled', !this.checked); // set it to disabled or enabled
                                              // depending on whether the box is
                                              // checked
});

http://jsfiddle.net/lonesomeday/pvSeL/2/