2012-06-22 112 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'); 
      } 
     }); 
    });