2012-06-22 114 views
57

我想检查一下当用户点击它时是否取消选中复选框。原因是因为我想在用户取消选中复选框时进行验证。因为至少需要检查一个复选框。所以如果他没有选中最后一个,那么它会自动再次检查自己。检查点击是否不勾选复选框 - jQuery

使用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的bug?对我来说这是意想不到的行为。其次,任何人都可以选择一个好的选择?

回答

102

试试这个:

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

demo

+0

很简单 - 使用jQuery找到未选中 – Binod

2

jQuery来检查检查?真?

if(!this.checked) { 

不要使用火箭筒做一个剃须刀的工作。

+3

如果该元素,它应该读取'$(this)[0] .checked' – Chris

29

已发布的答案将有效。如果你想使用jQuery的:不是你可以这样做:

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

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

这个答案的第一个例子s eems最容易读出所有的选项,所以我投票支持。 –

1

检查出一些这个问题的答案 - 我想这可能也适用于您:

how to run click function after default behaviour of a element

我认为你遇到了onclick函数的浏览器实现中的不一致性。有些人选择在事件被触发前和之后触发复选框。

+0

这实际上也非常重要。 – TheZ

+0

这就是为什么要检查检查的jQuery。真。 ;) – JoeBrockhaus

0

做这样的

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

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

这可能只是'this.checked'。第一行不需要'typeof'(它永远不会引发'ReferencError')。你也应该使用'prop()'而不是'attr()',它将返回一个布尔值,使得你的第二个也是多余的。 – alex

1

答案已经发布。但是,我们可以使用jQuery的这种方式从这里取也

demo

$(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'); 
    }); 
}); 
3
$(document).ready(function() { 
     $("#check1").click(function() { 
      var checked = $(this).is(':checked'); 
      if (checked) { 
       alert('checked'); 
      } else { 
       alert('unchecked'); 
      } 
     }); 
    });