检查单击时是否未选中复选框-jQuery


86

我想检查当用户单击复选框时是否只是未选中该复选框。这样做的原因是因为我想在用户取消选中复选框时进行验证。因为至少需要选中一个复选框。因此,如果他取消选中最后一个,则它将自动再次进行自我检查。

使用jQuery,我可以很容易地发现它是否被检查:

$('#check1').click(function() {
    if($(this).is(':checked'))
        alert('checked');
    else
        alert('unchecked');
});

但是我实际上只想要一个if语句来检查复选框是否刚刚被取消选中。

所以我想我可以用以下代码做到这一点:

$('#check2').click(function() {
    if($(this).not(':checked'))
        alert('unchecked');
    else
        alert('checked');
});

但这将始终显示“未选中”消息。并不是我所期望的...

演示: http : //jsfiddle.net/tVM5H/

所以最终我需要这样的东西:

$('#check2').click(function() {
    if($(this).not(':checked')) {
        // Got unchecked, so something!!!
    }
});

但这显然行不通。我宁愿不想使用第一个示例,因为那样的话,当我只需要一个'if'语句时,就会有一个不必要的'else'语句。

首先,这是一个jQuery错误吗?对我来说,这是意外的行为。其次,有人有理想的替代品吗?

Answers:



50

已经发布的答案将起作用。如果要使用jQuery:not,则可以执行以下操作:

if ($(this).is(':not(:checked)'))

要么

if ($(this).attr('checked') == false)

这个答案中的第一个例子似乎最容易从所有选项中读出,因此我赞成。
Toby 1 Kenobi

5

jQuery检查是否已检查?真?

if(!this.checked) {

不要使用火箭筒做剃刀。


4
如果使用jQuery查找元素,则应阅读$(this)[0].checked
克里斯,

@HoldOffHunger它是本机输入元素的一部分:developer.mozilla.org/en-US/docs/Web/HTML/Element/input / ... 如果您使用的是jQuery,那么Chris上面的注释中的语法正确。
TheZ

@TheZ:太好了!是的,您是对的,克里斯的回答很好。意见建议:是否可以用信用回答?OP和最佳答案都倾向于$(selector).is('...'),这是一个纯jQuery解决方案。仅.checked在他们拥有的地方使用它们.is('checked')本身不会起作用。
HoldOffHunger

5
$(document).ready(function() {
        $("#check1").click(function() {
            var checked = $(this).is(':checked');
            if (checked) {
                alert('checked');
            } else {
                alert('unchecked');
            }
        });
    });



1

答案已经发布。但是我们也可以通过这种方式使用jquery

演示

$(function(){
    $('#check1').click(function() {
        if($('#check1').attr('checked'))
            alert('checked');
        else
            alert('unchecked');
    });

    $('#check2').click(function() {
        if(!$('#check2').attr('checked'))
            alert('unchecked');
        else
            alert('checked');
    });
});

0

像这样做

if (typeof $(this).attr("checked") == "undefined" )

// To check if checkbox is checked
if( $(this).attr("checked")=="checked")

这可能只是this.checked。第一行不需要typeof那里(它永远不会引发ReferencError)。您还应该使用prop()而不是attr(),这将返回一个布尔值,从而使您的第二个布尔值也变得多余。
Alex
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.