打开/关闭复选框

AnA*_*ice 386 checkbox jquery toggle jquery-selectors

我有以下内容:

$(document).ready(function()
{
    $("#select-all-teammembers").click(function() {
        $("input[name=recipients\\[\\]]").attr('checked', true);
    });                 
});
Run Code Online (Sandbox Code Playgroud)

我希望id="select-all-teammembers"点击时可以在已选中和未选中之间切换.想法?这不是几十行代码?

Fré*_*idi 705

你可以写:

$(document).ready(function() {
    $("#select-all-teammembers").click(function() {
        var checkBoxes = $("input[name=recipients\\[\\]]");
        checkBoxes.prop("checked", !checkBoxes.prop("checked"));
    });                 
});
Run Code Online (Sandbox Code Playgroud)

在jQuery 1.6之前,当我们只有attr()而不是prop()时,我们曾经写过:

checkBoxes.attr("checked", !checkBoxes.attr("checked"));
Run Code Online (Sandbox Code Playgroud)

但是prop()具有比attr()应用于"布尔"HTML属性时更好的语义,因此在这种情况下通常是首选.

  • `$('input [type = checkbox]').触发器('click');下面@ 2astalavista提到的`更简洁,也触发"更改"事件. (11认同)
  • 使用'prop'也可以为Zepto工作.否则它将选中该框,但不会取消选中它. (6认同)
  • 这可以得到满足,因为它将状态基于第一个(因此如果用户检查第一个,然后使用切换,它们将不同步).略微调整,使其基于切换的状态,而不是列表中的第一个复选框:$("input [name = recipients \\ [\\]]").prop("checked",$(this).prop ( "检查")); (4认同)

小智 206

//this toggles the checkbox, and fires its event if it has    

$('input[type=checkbox]').trigger('click'); 
//or
$('input[type=checkbox]').click(); 
Run Code Online (Sandbox Code Playgroud)

  • 触发了不需要的事件。 (2认同)

Nor*_*ize 60

我知道这是旧的,但问题有点模糊,因为切换可能意味着每个复选框都应切换其状态,无论是什么.如果您有3个已选中且2未选中,则切换将使前3个未选中,最后2个选中.

为此,这里的解决方案都不起作用,因为它们使所有复选框具有相同的状态,而不是切换每个复选框的状态.这样做$(':checkbox').prop('checked')在很多复选框返回逻辑和所有之间的.checked二元性,即如果其中一人被选中时,返回的值是false.

.each()如果你想实际切换每个复选框状态而不是使它们全部相等,你需要使用,例如

   $(':checkbox').each(function () { this.checked = !this.checked; });
Run Code Online (Sandbox Code Playgroud)

请注意,您不需要$(this)在处理程序内部,因为该.checked属性存在于所有浏览器中.

  • 是的,这是切换所有复选框状态的正确答案! (5认同)
  • 当你有很多复选框时,比用 jQuery 触发点击快几个数量级。 (2认同)

kst*_*kst 16

这是你想要的另一种方式.

$(document).ready(function(){   
    $('#checkp').toggle(
        function () { 
            $('.check').attr('Checked','Checked'); 
        },
        function () { 
            $('.check').removeAttr('Checked'); 
        }
    );
});
Run Code Online (Sandbox Code Playgroud)

  • 那不是切换. (9认同)
  • @kst-这是一个更好的方法$('input [name = recipients \\ [\\]]')。toggle(this.checked); 忘了上课吧。 (2认同)

mat*_*rns 9

我认为触发点击更简单:

$("#select-all-teammembers").click(function() {
    $("input[name=recipients\\[\\]]").trigger('click');
});                 
Run Code Online (Sandbox Code Playgroud)


Ja͢*_*͢ck 8

从jQuery 1.6开始,您可以使用.prop(function)切换每个找到的元素的已检查状态:

$("input[name=recipients\\[\\]]").prop('checked', function(_, checked) {
    return !checked;
});
Run Code Online (Sandbox Code Playgroud)


Dbl*_*247 8

我能想到的最佳方式.

$('#selectAll').change(function () {
    $('.reportCheckbox').prop('checked', this.checked);
});
Run Code Online (Sandbox Code Playgroud)

要么

$checkBoxes = $(".checkBoxes");
$("#checkAll").change(function (e) {
    $checkBoxes.prop("checked", this.checked);
});   
Run Code Online (Sandbox Code Playgroud)

要么

<input onchange="toggleAll(this)">
function toggleAll(sender) {
    $(".checkBoxes").prop("checked", sender.checked);
}
Run Code Online (Sandbox Code Playgroud)


Abd*_*UMI 7

使用这个插件:

$.fn.toggleCheck  =function() {
       if(this.tagName === 'INPUT') {
           $(this).prop('checked', !($(this).is(':checked')));
       }

   }
Run Code Online (Sandbox Code Playgroud)

然后

$('#myCheckBox').toggleCheck();
Run Code Online (Sandbox Code Playgroud)