【问题标题】:Jquery If a checkbox is checked disable other checkboxesJquery 如果选中一个复选框,则禁用其他复选框
【发布时间】:2013-09-02 15:41:23
【问题描述】:

我有一组 php 生成的复选框:

<?php foreach($checkbox as $check) {?>
<input type = "checkbox" name="checkbox[]" class="<?php echo $check -> class ?>" value ="<?php echo $check -> value ?>" /><?php echo $check->value ?>
<?php } ?>

PHP 生成以下 HTML:

<input type="checkbox" name="checkbox[]" class="class1" value="Checkbox1" />Checkbox1
<input type="checkbox" name="checkbox[]" class="class1" value="Checkbox2" />Checkbox2
<input type="checkbox" name="checkbox[]" class="class1" value="Checkbox3" />Checkbox3

<input type="checkbox" name="checkbox[]" class="class2" value="Checkbox4" />Checkbox4
<input type="checkbox" name="checkbox[]" class="class2" value="Checkbox5" />Checkbox5
<input type="checkbox" name="checkbox[]" class="class2" value="Checkbox6" />Checkbox6

<input type="checkbox" name="checkbox[]" class="class3" value="Checkbox7" />Checkbox7
<input type="checkbox" name="checkbox[]" class="class3" value="Checkbox8" />Checkbox8

为了解释上面,我有三类复选框,并希望:

如果我选中 class1 中的任何内容,class3 将被禁用,如果我取消选中,class3 将重新启用。 如果我选中 class2 ,所有其他 class2 都将被禁用,class1 如果已选中则保持选中状态,否则将变为选中状态。

我已经尝试过这样做,使用下面的脚本。

$('input[class*="class"]').click(function(){
    if($(this).is(':checked')){
        var classValue = $(this).attr('class');
        if(classValue == 'class1'){
            $('.class3').prop('disabled', true);
            $('.class3').prop('checked', false);
        }
        else if(classValue == 'class2'){

            $('.class2').not(':checked').prop('disabled', true);
            $('.class3').prop('disabled', true);
        }

        else if(classValue == 'class3'){

            $('.class1').prop('checked', false);
            $('.class2').prop('checked', false);
            $('.class1, .class2').prop('disabled', true);

        }

    }

})

虽然没有用。

【问题讨论】:

  • 您的问题并没有说明检查class3 时应该发生什么,但您的代码中有这种情况。是哪个?

标签: javascript jquery html checkbox


【解决方案1】:
$('input[class^="class"]').click(function() {
    var $this = $(this);
    if ($this.is(".class1")) {
        if ($(".class1:checked").length > 0) {
            $(".class3").prop({ disabled: true, checked: false });
        } else {
            $(".class3").prop("disabled", false);
        }
    } else if ($this.is(".class2")) {
        if ($this.is(":checked")) {
            $(".class2").not($this).prop({ disabled: true, checked: false });
            $(".class1").prop("checked", true);
        } else {
            $(".class2").prop("disabled", false);
        }
    }
});

FIDDLE

【讨论】:

  • 这很好用。我正在尝试做类似的事情,检查“复选框 Z”会禁用其他复选框。但是,如果再次取消选中“复选框 Z”,我需要添加重新启用这些框并恢复检查的功能。如果有人对此有任何想法,请告诉我。
  • 您可以将旧状态保存在data 属性中。然后当他们取消选中 Z 时,检查所有其他复选框并根据该属性选中或取消选中它们。
  • 感谢您为我指明正确的方向。这超出了我的知识范围,所以我将对数据属性进行一些研究。
【解决方案2】:

试试这个http://jsfiddle.net/EACk4/

$(document).ready(function(){
    $('.class1').on('change', function(){        
        if($('.class1:checked').length){
            //or $('.class3').prop({disabled: 'disabled', checked: false});
            $('.class3').prop('disabled', true);
            $('.class3').prop('checked', false);
            return;
        }

        $('.class3').prop('disabled', false);
    });

    $('.class2').on('change', function(){
        if(!$(this).prop('checked')){
            $('.class2').prop('disabled', false);
            return;
        }
        $('.class2').prop('disabled', true);
        $(this).prop('disabled', false);

        !$('.class1:checked').length ? $('.class1').click() : '';
    });
})

【讨论】:

    【解决方案3】:

    我稍微修改了你的代码——我认为它完成了你想要的。

    $('input[class*="class"]').click(function(){
    
    var classValue = $(this).attr('class')
        ,isChecked = $(this).is(':checked');
    
    if(classValue == 'class1'){ 
        if( !isChecked && $('.' + classValue + ':checked').length > 0 ) {
            return;
        }
        $('.class3').prop('disabled', isChecked ? true : false);
        $('.class3').prop('checked', isChecked ? false : null);
    }
    else if(classValue == 'class2'){
        if( isChecked && $('.class1 :checked').length <= 0 ){
            $('.class1').prop('checked', true);  
        }
         $('.class2').not(':checked').prop('disabled', isChecked ? true : false); 
        $('.class3').prop('disabled', isChecked ? true : false);
    }
    else if(classValue == 'class3'){
    
        $('.class1, .class2').prop('checked', isChecked ? false : null);
        $('.class1, .class2').prop('disabled', isChecked ? true  : false);   
    }
    

    })

    【讨论】:

    • 再想一想,@Barmar 似乎有一个更有效的工作示例。我以前没有真正使用过jQuery。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-09
    • 2020-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多