17

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

这是我的 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)。看看下面的评论...

4

5 回答 5

44

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

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

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

于 2013-03-18T11:04:08.290 回答
3

你可以试试这个。

$('#myCheck').click(function() {
    var checkBoxes = $(this).siblings('input[type=checkbox]');
    checkBoxes.prop('checked', $(this).is(':checked') ? true : false);
});
于 2013-03-18T11:08:56.887 回答
0

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

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

看到这个小提琴

于 2013-03-18T10:39:55.007 回答
0

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

于 2013-11-28T11:33:54.620 回答
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

于 2015-06-23T00:03:07.137 回答