2012-06-22 21 views
57

Chcę sprawdzić, czy pole wyboru właśnie zostało odznaczone, gdy użytkownik kliknie. Powodem tego jest to, że chcę zrobić sprawdzanie poprawności, gdy użytkownik odznaczy pole wyboru. Ponieważ przynajmniej jeden checkbox musi zostać sprawdzony. Jeśli więc odznacza ostatnią, automatycznie sprawdza się ponownie.Sprawdź, czy pole wyboru NIE jest zaznaczone po kliknięciu - jQuery

z jQuery można łatwo dowiedzieć się pogoda to sprawdzone czy nie:

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

ale faktycznie tylko chcą mieć if, który sprawdza, czy pole wyboru właśnie dostał niezaznaczone.

więc myślałem, że może to zrobić za pomocą następującego kodu:

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

Ale to zawsze pojawi się komunikat „niesprawdzony”. Nie jest to, co spodziewałem się ...

demo:http://jsfiddle.net/tVM5H/

Więc w końcu muszę coś takiego:

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

Ale oczywiście to nie działa. Raczej nie chcę używać pierwszego przykładu, ponieważ wtedy miałbym niepotrzebne "else", gdy potrzebuję tylko jednego wyrażenia "if".

Po pierwsze, czy jest to błąd jQuery? To dla mnie nieoczekiwane zachowanie. Po drugie, czy ktoś jest dobrym kandydatem na alternatywę?

Odpowiedz

102

Spróbuj tego:

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

demo

+0

bardzo prosta - nie zaznaczone – Binod

2

jQuery sprawdzić sprawdzane? Naprawdę?

if(!this.checked) { 

Nie używaj bazooki do wykonywania czynności maszynki do golenia.

+3

Jeśli jQuery znaleźć element, powinien przeczytać "$ (this) [0] .checked" – Chris

29

Odpowiedź już opublikowana będzie działać. Jeśli chcesz użyć jQuery: nie można to zrobić:

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

lub

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

Pierwszy przykład w tej odpowiedzi s wydaje się najłatwiejszy do odczytania ze wszystkich opcji, więc głosuję na to. –

1

sprawdzić niektóre z odpowiedzi na to pytanie - myślę, że to może mieć zastosowanie do Ciebie:

how to run click function after default behaviour of a element

Wydaje mi się, że występuje niezgodność w implementacji przeglądarki funkcji onclick. Niektórzy decydują się przełączać pole wyboru przed uruchomieniem zdarzenia, a niektórzy po nim.

+0

To jest naprawdę bardzo ważne. – TheZ

+0

I dlatego jQuery do sprawdzenia pod kątem sprawdzenia. Naprawdę. ;) – JoeBrockhaus

0

to zrobić następująco

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

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

To może być po prostu "this.checked". Pierwsza linia nie potrzebuje tam 'typeof' (nigdy nie podniesie' ReferencError'). Powinieneś także używać 'prop()' zamiast 'attr()', która zwróci wartość logiczną, dzięki czemu twoja druga będzie również nadmiarowa. – alex

1

The Answer już pisał.Ale możemy użyć jQuery w ten sposób również

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'); 
      } 
     }); 
    }); 
Powiązane problemy