如何使用jQuery处理复选框的更改?


106

我有一些代码

<input type="checkbox" id="chk" value="value" />
<label for="chk">Value </label>
<br/>
<input type="button" id="But1" value="set value" />
<br />
<input type="button" id="But2" value="read checked" />

javascript:

$(document).ready(function () {
    console.log("Ready ...");
    registerHandlers();

    function registerHandlers() {
        $('#But1').click(function () {
            $('#chk').prop('checked', !$('#chk').is(':checked'));
        });
        $('#But2').click(function () {
            var chk1 = $('#chk').is(':checked');
            console.log("Value : " + chk1);
        });

        $('input[type="checkbox"]').change(function () {
            var name = $(this).val();
            var check = $(this).prop('checked');
            console.log("Change: " + name + " to " + check);
        });
    }
});

如何使用jQuery处理复选框的更改?我需要将处理程序更改为选中的所有复选框。

[更新]

有一个复选框和一些按钮。每个按钮都可以更改复选框。如何捕捉更改复选框的事件?

[更新]

在此示例jsfiddle中,我需要处理更改复选框。当我单击该框时,未显示消息“确定”按钮。


我不太了解您的问题吗?更改复选框应该怎么办?
尼古拉斯

有什么问题?这段代码似乎工作得很好
JaredPar'2

2
你能再说一遍你的问题吗?您已经有$('input [type =“ checkbox”]')。change处理程序,怎么了?
狂人2012年

如果您更改按钮复选框,则不会发生更改事件
BILL

3
仅供参考;$('#chk').prop('checked')返回一个布尔值,而不是该属性的值。参见api.jquery.com/prop
Stefan

Answers:


163

使用:checkbox选择器:

$(':checkbox').change(function() {

        // do stuff here. It will fire on any checkbox change

}); 

代码:http//jsfiddle.net/s6fe9/


75
... this.checked对于确定是否选中此复选框非常有用。
Stefan 2012年

1
是否可以注册多个处理程序?
BILL

1
在2015年还是建议这样做吗?
Eugen Sunic

2
看起来API似乎没有更改,所以可以。
萨米奇(Samich)

这需要在$(document).ready(function()...里面...对我来说,对吗?
kaya 18'Aug

67

您也可以使用该字段的ID

$('#checkbox1').change(function() {
   if($(this).is(":checked")) {
      //'checked' event code
      return;
   }
   //'unchecked' event code
});

17

希望这会有所帮助。

$('input[type=checkbox]').change(function () {
    if ($(this).prop("checked")) {
        //do the stuff that you would do when 'checked'

        return;
    }
    //Here do the stuff you want to do when 'unchecked'
});

6
从jQuery 1.6开始,最好使用$(this).prop(“ checked”),因为它会随着复选框的实际状态动态变化。
hrabinowitz 2014年

3
.attr(“ checked”)不正确,因为在用户单击时不会更新。我确认@hrabinowitz的评论。
阿德里安2014年

7
$("input[type=checkbox]").on("change", function() { 

    if (this.checked) {

      //do your stuff

     }
});

1
发布前,请检查您自己的代码是否有效。您的选择器有一个明显的问题...
Jonathan

live()已弃用。
guettli

4
$('#myForm').on('change', 'input[type=checkbox]', function() {
    this.checked ? this.value = 'apple' : this.value = 'pineapple';
});

3
请详细说明您的答案:仅代码解决方案更有可能会被删除,因为它们没有解释,只能解决(如果有)。
rekaszeru 2014年

抱歉@rekaszeru下次我会做的更好
Everton ZP

0

在我看来,removeProp在Chrome中无法正常工作: jsfiddle

        $('#badBut1').click(function () {
        checkit('Before');
        if( $('#chk').prop('checked') )
        {
          $('#chk').removeProp('checked');
        }else{
            $('#chk').prop('checked', true);
        }
        checkit('After');
    });
    $('#But1').click(function () {
        checkit('Before');
        if( $('#chk').prop('checked') )
        {
          $('#chk').removeClass('checked').prop('checked',false);
        }else{
            $('#chk').addClass('checked').prop('checked', true);
        }
        checkit('After');
    });

    $('#But2').click(function () {
        var chk1 = $('#chk').is(':checked');
        console.log("Value : " + chk1);
    });

    $('#chk').on( 'change',function () {
        checkit('Result');
    });
    function checkit(moment) {
        var chk1 = $('#chk').is(':checked');
        console.log(moment+", value = " + chk1);
    };

如何在没有事件的情况下切换复选框(从外部):jsfiddle.net/k91k0sLu/1
Laurent belloeil

0

名称获取单选值

  $('input').on('className', function(event){
        console.log($(this).attr('name'));
        if($(this).attr('name') == "worker")
            {
                resetAll();                 
            }
    });
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.