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

时间:2013-03-18 10:37:34

标签: jquery checkbox

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

这是我的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

查看我的简单JsFiddle以了解问题。

编辑1:就像Inser所说,问题发生在jQuery 1.9.2及更高版本上。 jQuery 1.8.3没有更多问题。奇怪...

编辑2: Inser找到解决方案,使用 .prop('checked',true)而不是 .attr('checked',true)。看看下面的评论......

5 个答案:

答案 0 :(得分:38)

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

$('#myCheck').prop('checked', true);
$('#myCheck').prop('checked', false);

http://jsfiddle.net/uQfMs/37/

答案 1 :(得分:3)

你可以试试这个。

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

答案 2 :(得分:0)

也许您只想查看主复选框:

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

请参阅此fiddle

答案 3 :(得分:0)

实际上,我做了一些经验 $(':checkbox').attr('checked',false);虽然这可以设置“已检查”属性,但它不会在视觉中继续显示。和$(':checkbox').prop('checked', true);这个完美无缺!希望这可以提供一些帮助。

答案 4 :(得分:0)

我为你写了一个插件:

$.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>

http://codepen.io/nicholasabrams/pen/mJqyqG