2012-06-22 11 views
57

Ich möchte prüfen, ob ein Kontrollkästchen gerade deaktiviert wurde, wenn ein Benutzer darauf klickt. Der Grund dafür ist, dass ich eine Validierung durchführen möchte, wenn ein Benutzer ein Kontrollkästchen deaktiviert. Weil mindestens ein Kontrollkästchen aktiviert sein muss. Wenn er also die letzte abhebt, überprüft er sich automatisch erneut.Überprüfen Sie, ob das Kontrollkästchen bei Klick nicht aktiviert ist - jQuery

Mit jQuery kann ich leicht herausfinden, ob es aktiviert ist oder nicht:

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

Aber ich möchte eigentlich nur eine if-Anweisung haben, wenn eine Checkbox deaktiviert ist jetzt noch überprüft. So

ich dachte ich, dass mit dem folgenden Code tun könnte:

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

Aber das wird immer zeigen die ‚unkontrollierte‘ betätigen. Nicht wirklich das, was ich erwartet hatte ...

Demo:http://jsfiddle.net/tVM5H/

So schließlich brauche ich so etwas wie:

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

Aber offensichtlich funktioniert das nicht. Ich möchte das erste Beispiel lieber nicht verwenden, denn dann hätte ich eine unnötige "else" -Anweisung, wenn ich nur eine "if" -Anweisung benötige.

Also zuerst, ist das ein jQuery-Bug? Ursache für mich ist unerwartetes Verhalten. Und zweitens, irgendjemand irgendwelche Ideale für eine gute Alternative?

Antwort

102

Versuchen Sie folgendes:

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

demo

+0

sehr einfach - NICHT aktiviert – Binod

2

jQuery für aufgegebenes zu überprüfen? "Ja wirklich?"

if(!this.checked) { 

Verwenden Sie keine Bazooka, um einen Rasierer zu machen.

+3

jQuery Bei Verwendung finden das Element, sollte es lesen $ (this) [0] .checked' – Chris

29

Die bereits gepostete Antwort funktioniert. Wenn Sie die jQuery verwenden möchten: nicht können Sie dies tun:

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

oder

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

Das erste Beispiel in dieser Antwort s Es ist am einfachsten, alle Optionen zu lesen, also stimme ich dafür. –

1

prüfen auf diese Frage einige der Antworten - ich denke, es ist an Ihnen anwenden könnte:

how to run click function after default behaviour of a element

Ich denke, dass Sie in eine Inkonsistenz in der Browser-Implementierung der onclick Funktion stoßen. Einige wählen das Kontrollkästchen, bevor das Ereignis ausgelöst wird und einige danach.

+0

Das ist eigentlich auch sehr wichtig. – TheZ

+0

Und deshalb jQuery nach überprüft zu überprüfen. Ja wirklich. ;) – JoeBrockhaus

0

Machen Sie es wie diese

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

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

Dies könnte einfach 'this.checked' sein. Die erste Zeile benötigt dort nicht "typeof" (es wird nie einen 'ReferencError' ausgelöst). Sie sollten auch 'prop()' anstelle von 'attr()' verwenden, was einen booleschen Wert zurückgibt, wodurch Ihr zweiter ebenfalls überflüssig wird. – alex

1

Die Antwort bereits gebucht.Aber wir können die jquery auf diese Weise verwenden, auch

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'); 
      } 
     }); 
    }); 
Verwandte Themen