使用jQuery动态选中和取消选中复选框:bug?

使用jQuery动态选中和取消选中复选框:bug?,jquery,checkbox,Jquery,Checkbox,我制作了一个脚本来控制主复选框和从复选框(自动选中和取消选中) 这是我的JS: $(document).ready(function() { $('#myCheck').click(function() { $('.myCheck').attr('checked', false); }); $('.myCheck').click(function() { if ($('.myCheck').is(':checked')) {

我制作了一个脚本来控制主复选框和从复选框(自动选中和取消选中)

这是我的JS:

$(document).ready(function() {

    $('#myCheck').click(function() {
        $('.myCheck').attr('checked', false);
    });
    $('.myCheck').click(function() {
        if ($('.myCheck').is(':checked')) {
            $('#myCheck').attr('checked', false);
        } else {
            $('#myCheck').attr('checked', true); // IT DOESN'T WORK, WHY ?
            alert("Checkbox Master must be checked, but it's not!");
        }
    });

});
这是我的HTML:

<input type="checkbox" id="myCheck" checked="checked" />&nbsp;&nbsp;Checkbox Master<br />
<input type="checkbox" class="myCheck" value="1" />&nbsp;&nbsp;Checkbox Slave 1<br />
<input type="checkbox" class="myCheck" value="1" />&nbsp;&nbsp;Checkbox Slave 2
主复选框
复选框从属1
复选框从属2
看看我的简单理解问题

编辑1:正如Inser所说,问题发生在jQuery1.9.2及更高版本上。jQuery1.8.3不再有问题。奇怪


编辑2:如果找到解决方案,请使用.prop('checked',true)代替.attr('checked',true)。查看下面的注释…

也许您只想选中主复选框:

$('#myCheck').click(function() {
       $('.myCheck').attr('checked', false);
       $(this).attr('checked', true);
});

见此。

对jQuery的新版本使用prop方法:

$('#myCheck').prop('checked', true);
$('#myCheck').prop('checked', false);
你可以试试这个

$('#myCheck').click(function() {
    var checkBoxes = $(this).siblings('input[type=checkbox]');
    checkBoxes.prop('checked', $(this).is(':checked') ? true : false);
});

事实上,我有过一些经验
$(':checkbox').attr('checked',false)虽然这可以设置“checked”属性,但它不会继续显示在视觉中。和
$(':checkbox').prop('checked',true)这一个非常好用!希望这能有所帮助。

我为您编写了一个插件:

$.fn.dependantCheckbox = function() {
  var $targ = $(this);
  function syncSelection(group, action) {
    $targ.each(function() {
      if ($(this).data('checkbox-group') === group) {
        $(this).prop('checked', action);
      }
    });
  };
  $('input[type="checkbox"][data-checkbox-group]').on('change', function() {
    var groupSelection = $(this).data('checkbox-group');
    var isChecked = $(this).prop('checked');
    syncSelection(groupSelection, isChecked);
  });
}
$('input[type="checkbox"][data-checkbox-group]').dependantCheckbox();


<input data-checkbox-group="1" type="checkbox" id="test" />
<label for="test">test</label>
<input data-checkbox-group="1" type="checkbox" id="test2" />
<label for="test2">test2</label>
<input data-checkbox-group="2" type="checkbox" id="test3" />
<label for="test3">test3</label>
<input data-checkbox-group="2" type="checkbox" id="test4" />
<label for="test4">test4</label>
$.fn.dependent复选框=函数(){
var$targ=$(本);
功能选择(组、操作){
$targ.每个(函数(){
if($(this).data('checkbox-group')==组){
$(this.prop('checked',action);
}
});
};
$('input[type=“checkbox”][data checkbox group]')。在('change',function()上{
var groupSelection=$(this).data('checkbox-group');
var isChecked=$(this.prop('checked');
同步选择(组选择,已选中);
});
}
$('input[type=“checkbox”][data checkbox group]')。依赖项复选框();
测试
测试2
测试3
测试4

问题是什么?
看看你的简单JSFIDLE就明白问题了
但是myaaan!!我不知道你们想做什么…所以你们想要什么阿克图利克,对不起,伙计们,我认为我的代码很清楚。。。事实上,一旦单击复选框Master,所有复选框Slave都必须取消选中:它工作正常。另一方面,一旦取消选中复选框从属项,并且没有其他复选框从属项,则必须自动选中复选框主项。很抱歉,我希望您现在能理解我的问题…看起来这是jquery的问题。它在1.8.3版中工作得很好,但在1.9.1版之后就不行了,你说得对!所以这是一个真正的Jquery错误…非常感谢Inser,这是解决方案,你救了我的一天(和一个晚上)!干得好!;-)非常好,我对最新的jQuery1.11非常着迷,谢谢!这在jquery版本2+中似乎不起作用。。。还是只有我?三元运算符是多余的<代码>$(此).is(':checked')?true:false
将始终返回与
$(this.)相同的布尔值。is(“:checked”)
。非常好的插件。只是想知道如果一个输入框是多个组的一部分,那么如何根据这个插件处理这个问题?