Wie überprüfe ich, ob in jQuery ein Kontrollkästchen aktiviert ist?


4550

Ich muss die checkedEigenschaft eines Kontrollkästchens aktivieren und eine Aktion basierend auf der überprüften Eigenschaft mit jQuery ausführen.

Wenn beispielsweise das Kontrollkästchen Alter aktiviert ist, muss ein Textfeld angezeigt werden, um das Alter einzugeben. Andernfalls wird das Textfeld ausgeblendet.

Der folgende Code falsewird jedoch standardmäßig zurückgegeben:

if ($('#isAgeSelected').attr('checked'))
{
    $("#txtAge").show();
}
else
{
    $("#txtAge").hide();
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<input type="checkbox" id="isAgeSelected"/>

<div id="txtAge" style="display:none">
Age is selected
</div>

Wie kann ich die checkedEigenschaft erfolgreich abfragen ?


14
$ ('# isAgeSelected') gibt die Sammlung zurück und ersetzt sie durch: $ ('# isAgeSelected') [0] .checked
zamoldar

14
warum nicht$('#isAgeSelected').checked
Don Cheadle

1
Eine umfassende (und korrekte) Antwort finden Sie unter: stackoverflow.com/questions/426258/…
Paul Kenjora

12
Da jQuery-Selektoren ein Array zurückgeben, können Sie$('#isAgeSelected')[0].checked
Felipe Leão

2
Für mich hat die folgende Optimierung funktioniert: Ersetzen Sie .attr ('geprüft') durch .is (': geprüft')
Mark N Hopgood

Antworten:


3433

Wie kann ich die überprüfte Eigenschaft erfolgreich abfragen?

Die checkedEigenschaft eines Kontrollkästchen-DOM-Elements gibt den checkedStatus des Elements an.

In Anbetracht Ihres vorhandenen Codes können Sie daher Folgendes tun:

if(document.getElementById('isAgeSelected').checked) {
    $("#txtAge").show();
} else {
    $("#txtAge").hide();
}

Es gibt jedoch eine viel schönere Möglichkeit, dies zu tun toggle:

$('#isAgeSelected').click(function() {
    $("#txtAge").toggle(this.checked);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="checkbox" id="isAgeSelected"/>
<div id="txtAge" style="display:none">Age is something</div>


36
Ich habe auch die obige Bedingung versucht, aber es gibt nur falsch zurück
Prasad

24
$ ("# txtAge"). toggle (this.checked); Funktioniert genauso wie $ ("# txtAge"). Toggle (). Wenn also aus irgendeinem Grund der Status überprüft und das nächste Div ausgeblendet wird (Sie haben in Ihrem Browser auf die Schaltfläche "Zurück" geklickt), funktioniert dies nicht wie erwartet.
Maksim Vi.

23
@Chiramisu - Wenn Sie die Antwort vollständig gelesen hätten, hätten Sie bemerkt, dass meine Bearbeitung das is(':checked')Geschäft nicht nutzt .
Karim79

8
zu setzen: $ ("# chkmyElement") [0] .checked = true; zu bekommen: if ($ ("# chkmyElement") [0] .checked)
JJ_Coder4Hire

28
Dies ist keine Antwort auf die Frage. this.checkedist nicht jQuery, wie das OP verlangt. Außerdem funktioniert es nur, wenn der Benutzer auf das Kontrollkästchen klickt, das nicht Teil der Frage ist. Die Frage ist wiederum How to check whether a checkbox is checked in jQuery?zu jedem Zeitpunkt mit oder ohne Klicken auf das Kontrollkästchen und in jQuery.
Marc Compte

1847

Verwenden Sie die is () -Funktion von jQuery :

if($("#isAgeSelected").is(':checked'))
    $("#txtAge").show();  // checked
else
    $("#txtAge").hide();  // unchecked

19
Wenn Sie keine Dauer, Lockerung usw. benötigen, können Sie $("#txtAge").toggle($("#isAgeSelected").is(':checked'))
naor

13
+1 Es gibt verschiedene Möglichkeiten, um geprüftes Eigentum zu erhalten. Einige sind hier aufgelistet
user3199690

@NickG Eigentlich jQuery hat eine Sichtbar - Selektor
Hvdd

2
@hvdd Ich weiß - ich sagte "Eigenschaft", nicht Selektor.
NickG

@ NickG ... Ich verstehe nicht, was du meinst. jQuery hat keine .visible"Eigenschaft" ( Eigenschaft ? Sie meinen Methode ?), da das Element no HTML eine sichtbare Eigenschaft hat. Sie haben eine display Stileigenschaft und sie ist etwas komplexer als Ein / Aus.
xDaizu

567

Verwenden von jQuery> 1.6

<input type="checkbox" value="1" name="checkMeOut" id="checkMeOut" checked="checked" />

// traditional attr
$('#checkMeOut').attr('checked'); // "checked"
// new property method
$('#checkMeOut').prop('checked'); // true

Verwenden der neuen Eigenschaftsmethode:

if($('#checkMeOut').prop('checked')) {
    // something when checked
} else {
    // something else when not
}

27
Ich würde gerne wissen, warum dies nicht die Antwort ist ... Wenn Sie überhaupt jquery verwenden, ist die .propMethode die entworfene Methode, um Requisiten zu überprüfen. .. ... Wenn Sie den .is(":checked")Ansatz machen wollen, ist das in Ordnung, aber es ist nicht die entworfene Art, es mit jquery zu machen. Recht?
dsdsdsdsd

1
@dsdsdsdsd vermutlich, weil es noch einen weiteren Abwärtskompatibilitätsschritt benötigt (ich stehe gerade vor dem gleichen Problem).
user98085

18
.is(":checked")und .prop("checked")sind beide gültige Möglichkeiten, um das gleiche Ergebnis in jQuery zu erhalten, .isfunktioniert in allen Versionen, .properfordert 1.6+
Gnarf

Wenn Sie .attr('checked')in jQuery 1.11.3 verwenden, werden Sie undefiniert. Wenn Sie es verwenden .prop('checked'), erhalten Sie true / false. Ich verstehe nicht, warum sie es so geändert haben, dass es funktioniert, wenn ältere Browser die späteren jQuery-Versionen, die eingeführt wurden .prop()und daher benötigen, nicht unterstützen können .attr(). Die einzige Rettung besteht darin, dass die älteren Browser (dh IE 8) nichts> jQuery 1.9 unterstützen können. Hoffentlich haben sie dies .attr('checked')in dieser Version nicht getan (make = undefined)! Zum Glück gibt es immer this.checked.
Vapcguy

230

jQuery 1.6+

$('#isAgeSelected').prop('checked')

jQuery 1.5 und niedriger

$('#isAgeSelected').attr('checked')

Beliebige Version von jQuery

// Assuming an event handler on a checkbox
if (this.checked)

Alle Gutschriften gehen an Xian .


8
Technisch this.checkedwird gerade Javascript verwendet. Aber ich liebe diese jQuery-übergreifende Antwort!
Vapcguy

170

Ich benutze dies und das funktioniert absolut gut:

$("#checkkBoxId").attr("checked") ? alert("Checked") : alert("Unchecked");

Hinweis: Wenn das Kontrollkästchen aktiviert ist, wird true zurückgegeben, andernfalls undefiniert. Überprüfen Sie daher besser den Wert "TRUE".


6
Dies funktioniert, weil $ ("# checkkBoxId"). Attr ("geprüft") "geprüft" oder "" (leere Zeichenfolge) zurückgibt. Und eine leere Zeichenfolge ist falsch, eine nicht leere Zeichenfolge ist wahr, siehe Informationen zu Wahrheits- / Falschwerten docs.nodejitsu.com/articles/javascript-conventions/…
Adrien Be

7
Mit jquery 2.1.x wird immer überprüft zurückgegeben, ob es standardmäßig aktiviert ist ... Ich weiß nicht, ob dieses Verhalten beabsichtigt ist, aber es funktioniert sicherlich nicht (ich denke, es ist ein Fehler) ... Das val () funktioniert auch nicht, es bleibt "an". Die prop () funktioniert ordnungsgemäß und die dom.checked funktioniert auch.
inf3rno

1
Und das Problem tritt auf, wenn Sie ältere Browser mit unterstützen müssen .attr()! Wenn sie nur gut genug in Ruhe gelassen würden ... Eine andere Antwort hier zu finden, sagte, dass Sie nur this.checkedfür eine Cross-jQuery-Lösung verwenden können, da es sich im Grunde nur um Javascript handelt.
Vapcguy

.attr ('geprüft') prüft, ob es standardmäßig aktiviert ist, ja. Weil es das HTML- Attribut überprüft , nicht den aktuellen Status. Die vorherige Version war ein Fehler (obwohl einer, der viel ausgenutzt wurde, denke ich).
Jay Irvine

149

Verwenden:

<input type="checkbox" name="planned_checked" checked id="planned_checked"> Planned

$("#planned_checked").change(function() {
    if($(this).prop('checked')) {
        alert("Checked Box Selected");
    } else {
        alert("Checked Box deselect");
    }
});

    $("#planned_checked").change(function() {
        if($(this).prop('checked')) {
            alert("Checked Box Selected");
        } else {
            alert("Checked Box deselect");
        }
    });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input type="checkbox" name="planned_checked" checked id="planned_checked"> Planned


119

Seit jQuery 1.6 hat sich das Verhalten von jQuery.attr()geändert, und Benutzer werden aufgefordert, es nicht zum Abrufen des überprüften Status eines Elements zu verwenden. Stattdessen sollten Sie Folgendes verwenden jQuery.prop():

$("#txtAge").toggle(
    $("#isAgeSelected").prop("checked") // For checked attribute it returns true/false;
                                        // Return value changes with checkbox state
);

Zwei weitere Möglichkeiten sind:

$("#txtAge").get(0).checked
$("#txtAge").is(":checked")

und $ ("# txtAge") [0] .checked
Yevgeniy

101

Das hat bei mir funktioniert:

$get("isAgeSelected ").checked == true

Wo isAgeSelectedist die ID der Steuerung?

Auch die Antwort von @ karim79 funktioniert einwandfrei . Ich bin mir nicht sicher, was ich zum Zeitpunkt des Tests verpasst habe.

Beachten Sie, dass diese Antwort Microsoft Ajax und nicht jQuery verwendet


4
In allen Fällen können Sie in allen normalen Programmiersprachen== true
RedPixel

@ RedPixel Es sei denn, Sie haben es mit nullbaren Typen zu tun. :) (pedantischer Smiley)
Kolob Canyon

88

Wenn Sie eine aktualisierte Version von jquery verwenden, müssen Sie eine .propMethode auswählen, um Ihr Problem zu beheben:

$('#isAgeSelected').prop('checked')wird zurückgegeben, truewenn aktiviert und falsedeaktiviert. Ich habe es bestätigt und bin früher auf dieses Problem gestoßen. $('#isAgeSelected').attr('checked')und $('#isAgeSelected').is('checked')kehrt zurück, undefinedwas für die Situation keine würdige Antwort ist. Gehen Sie also wie unten angegeben vor.

if($('#isAgeSelected').prop('checked')) {
    $("#txtAge").show();
} else {
    $("#txtAge").hide();
}

Hoffe es hilft :) - Danke.


warum nicht $('#isAgeSelected').checked?
Don Cheadle

1
Um .is zu verwenden, benötigen Sie einen Doppelpunkt $ ('# isAgeSelected'). is (': checked')
Patrick

62

Die Verwendung des ClickEreignishandlers für die Checkbox-Eigenschaft ist unzuverlässig, da sich die checkedEigenschaft während der Ausführung des Ereignishandlers selbst ändern kann!

Im Idealfall möchten Sie Ihren Code in einen changeEreignishandler einfügen , der jedes Mal ausgelöst wird, wenn der Wert des Kontrollkästchens geändert wird (unabhängig davon, wie er ausgeführt wird).

$('#isAgeSelected').bind('change', function () {

   if ($(this).is(':checked'))
     $("#txtAge").show();
   else
     $("#txtAge").hide();
});

3
Ab jQuery 1.7 ist die .on()Methode die bevorzugte Methode zum Anhängen von Ereignishandlern an ein Dokument.
Naor

61

Verwenden:

<input type="checkbox" id="abc" value="UDB">UDB
<input type="checkbox" id="abc" value="Prasad">Prasad
$('input#abc').click(function(){
  if($(this).is(':checked'))
  {
    var checkedOne=$(this).val()
    alert(checkedOne);

    // Do some other action
  }
})

Dies kann hilfreich sein, wenn Sie möchten, dass die erforderliche Aktion nur ausgeführt werden muss, wenn Sie das Kontrollkästchen nicht zum Zeitpunkt des Entfernens des Kontrollkästchens aktivieren.


53

Ich habe beschlossen, eine Antwort zu veröffentlichen, wie man genau dasselbe ohne jQuery macht. Nur weil ich ein Rebell bin.

var ageCheckbox = document.getElementById('isAgeSelected');
var ageInput = document.getElementById('txtAge');

// Just because of IE <333
ageCheckbox.onchange = function() {
    // Check if the checkbox is checked, and show/hide the text field.
    ageInput.hidden = this.checked ? false : true;
};

Zuerst erhalten Sie beide Elemente anhand ihrer ID. Anschließend weisen Sie dem onchangeEreignis des Kontrollkästchens eine Funktion zu, die prüft, ob das Kontrollkästchen aktiviert wurde, und die hiddenEigenschaft des Alterstextfelds entsprechend festlegt . In diesem Beispiel mit dem ternären Operator.

Hier ist eine Geige, mit der Sie sie testen können.

Nachtrag

Wenn die browserübergreifende Kompatibilität ein Problem darstellt, schlage ich vor, die CSS- displayEigenschaft auf none und inline zu setzen .

elem.style.display = this.checked ? 'inline' : 'none';

Langsamer, aber browserübergreifend kompatibel.


Nun, .hiddenist nicht sehr browserübergreifend, obwohl mir diese Lösung gefällt :)
Florian Margaine

Es ist in der Tat der beste Weg zu verwenden style. Das ist jedoch bedauerlich, da die .hiddenLeistung viel besser ist .
Florian Margaine

Zuordnung innerhalb eines bedingten Operators? Legal, ja. Nicht das, was ich guten Stil nennen würde.
Jules

kann vereinfachen zu: ageInput.hidden =! this.checked; (Ich hasse es, wenn Leute unnötig boolesche Literale verwenden ... Wenn Sie sowohl "wahr" als auch "falsch" in derselben einfachen Aussage verwenden, ist es wahrscheinlich unnötig,
beides

52

Ich glaube, Sie könnten dies tun:

if ($('#isAgeSelected :checked').size() > 0)
{
    $("#txtAge").show(); 
} else { 
    $("#txtAge").hide();
}

alert ($ ('input [name = isAgeSelected]'). attr ('checked')); Der obige Code zeigt basierend auf der Prüfung wahr / falsch. Jedes Problem mit den vorherigen Versuchen
Prasad

Prasad, verweisen Sie auf Ihr Kontrollkästchen nach Name oder ID? Ich werde jetzt verwirrt ...
karim79

Können Sie ihm keinen Ausweis geben? Die Dinge wären viel einfacher. In Ihrem Beispiel haben Sie es durch seine ID adressiert
Xenon

Die .size () -Methode ist ab jQuery 1.8 veraltet. Verwenden Sie stattdessen die Eigenschaft .length (with no () ;-)! Und vielleicht müssen Sie "#isAgeSelected: geprüft" zusammenhalten.
François Breton

47

Ich bin auf genau das gleiche Problem gestoßen. Ich habe ein ASP.NET-Kontrollkästchen

<asp:CheckBox ID="chkBox1" CssClass='cssChkBox1' runat="server" />

Im jQuery-Code habe ich den folgenden Selektor verwendet, um zu überprüfen, ob das Kontrollkästchen aktiviert wurde oder nicht, und es scheint wie ein Zauber zu funktionieren.

if ($("'.cssChkBox1 input[type=checkbox]'").is(':checked'))
{ ... } else { ... }

Ich bin sicher, Sie können auch die ID anstelle der CssClass verwenden.

if ($("'#cssChkBox1 input[type=checkbox]'").is(':checked'))
{ ... } else { ... }

Ich hoffe das hilft dir.



46

Dieser Code wird Ihnen helfen

$('#isAgeSelected').click(function(){
   console.log(this.checked);
   if(this.checked == true) {
        $("#txtAge").show();
    } else {
       $("#txtAge").hide();
   }
});

42

Das funktioniert bei mir:

/* isAgeSelected being id for checkbox */

$("#isAgeSelected").click(function(){
  $(this).is(':checked') ? $("#txtAge").show() : $("#txtAge").hide();
});

41

Dies ist eine andere Methode, um dasselbe zu tun:

$(document).ready(function (){

    $('#isAgeSelected').click(function() {
        // $("#txtAge").toggle(this.checked);

        // Using a pure CSS selector
        if ($(this.checked)) {
            alert('on check 1');
        };

        // Using jQuery's is() method
        if ($(this).is(':checked')) {
            alert('on checked 2');
        };

        //  // Using jQuery's filter() method
        if ($(this).filter(':checked')) {
            alert('on checked 3');
        };
    });
});
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<input type="checkbox" id="isAgeSelected"/>
<div id="txtAge" style="display:none">Age is something</div>


35

Benutze das:

if ($('input[name="salary_in.Basic"]:checked').length > 0)

Die Länge ist größer als Null, wenn das Kontrollkästchen aktiviert ist.


33

Meine Vorgehensweise ist:

if ( $("#checkbox:checked").length ) {       
    alert("checkbox is checked");
} else {
    alert("checkbox is not checked");
}

31
$(selector).attr('checked') !== undefined

Dies wird zurückgegeben, truewenn die Eingabe aktiviert ist und falsenicht.


4
Ich verstehe, warum dies in bestimmten Szenarien funktionieren kann, obwohl es das gleiche Problem hat, .attr('checked')dass es nicht immer den richtigen Status zurückgibt. Wie pro Salman A ‚s Antwort (und vielleicht auch andere‘), dann ist es eine sicherere Option zu nutzen , .prop('checked')statt. Außerdem ist es auch möglich, undefinedals zu deklarieren var undefined = 'checked';.
WynandB

.prop('checked')scheint jetzt eine bessere Antwort zu sein. Es war zu dem Zeitpunkt, als es geschrieben wurde, nicht so zuverlässig. Ich verstehe nicht und denke auch nicht, dass es eine gute Idee ist, undefiniert neu zu deklarieren.
fe_lix_

Als Randnotiz ist die Überprüfung auf undefiniert besser mittypeof (x) !== "undefined"
naor

In diesem Fall glaube ich, dass es genauer und einfacher zu lesen ist! ==. Ich würde den Typ (x) nur verwenden, wenn ich eine Variable teste, die möglicherweise in der Vergangenheit definiert wurde oder nicht.
fe_lix_

30
$(document).ready(function() {    
    $('#agecheckbox').click(function() {
        if($(this).is(":checked"))
        {
            $('#agetextbox').show();
        } else {
            $('#agetextbox').hide();
        }
    });
});

30

Sie können verwenden:

  if(document.getElementById('isAgeSelected').checked)
    $("#txtAge").show();  
  else
    $("#txtAge").hide();

if($("#isAgeSelected").is(':checked'))
  $("#txtAge").show();  
else
  $("#txtAge").hide();

Beide sollten funktionieren.


27

1) Wenn Ihr HTML-Markup lautet:

<input type="checkbox"  />

attr verwendet:

$(element).attr("checked"); // Will give you undefined as initial value of checkbox is not set

Wenn Stütze verwendet wird:

$(element).prop("checked"); // Will give you false whether or not initial value is set

2) Wenn Ihr HTML-Markup lautet:

 <input type="checkbox"  checked="checked" />// May be like this also  checked="true"

attr verwendet:

$(element).attr("checked") // Will return checked whether it is checked="true"

Verwendete Requisite:

$(element).prop("checked") // Will return true whether checked="checked"

Dies ist ein echtes Problem. Meine Problemumgehung: Fügen Sie der Eingabe ein Änderungsereignis hinzu: <input type = "checkbox" onchange = "ChangeChkBox ()" /> Verwenden Sie dieses Ereignis, um eine boolesche JavaScript-Variable zu ändern, und verwenden Sie die JavaScript-Variable, anstatt das Kontrollkästchen direkt abzufragen.
Graham Laight

24

Dieses Beispiel ist für die Schaltfläche.

Versuche Folgendes:

<input type="button" class="check" id="checkall" value="Check All" />  &nbsp; <input type="button" id="remove" value="Delete" /> <br/>

<input type="checkbox" class="cb-element"  value="1" /> Checkbox  1 <br/>
<input type="checkbox" class="cb-element"  value="2" /> Checkbox  2 <br/>
<input type="checkbox" class="cb-element"  value="3" /> Checkbox  3 <br/>


$('#remove').attr('disabled', 'disabled'); 

$(document).ready(function() {  

    $('.cb-element').click(function() {

        if($(this).prop('checked'))
        {
            $('#remove').attr('disabled', false);
        }
        else
        {
            $('#remove').attr('disabled', true);
        }
    });   

    $('.check:button').click(function()
{
    var checked = !$(this).data('checked');
    $('input:checkbox').prop('checked', checked);
    $(this).data('checked', checked);

    if(checked == true)
    {
        $(this).val('Uncheck All');
         $('#remove').attr('disabled', false);
    }

    else if(checked == false)
    {
        $(this).val('Check All');
        $('#remove').attr('disabled', true);
    }
});
});

24

Die Top-Antwort hat es nicht für mich getan. Dies tat jedoch:

<script type="text/javascript">
    $(document).ready(function(){

        $("#li_13").click(function(){
            if($("#agree").attr('checked')){
                $("#saveForm").fadeIn();
            }
            else
            {
                $("#saveForm").fadeOut();
            }
        });
    });
</script>

Grundsätzlich wird beim Klicken auf das Element # li_13 mithilfe der .attr('checked')Funktion geprüft, ob das Element # zustimmen (das Kontrollkästchen) aktiviert ist . Wenn dies der Fall ist, wird das Element #saveForm eingeblendet, und wenn nicht, wird das Element saveForm ausgeblendet.


22

Ich benutze dies:

 <input type="checkbox" id="isAgeSelected" value="1" /> <br/>
 <input type="textbox" id="txtAge" />

 $("#isAgeSelected").is(':checked') ? $("#txtAge").show() : $("#txtAge").hide();

22

Obwohl Sie eine JavaScript-Lösung für Ihr Problem vorgeschlagen haben (Anzeigen von a, textboxwenn a checkboxist checked), kann dieses Problem nur durch CSS gelöst werden . Mit diesem Ansatz funktioniert Ihr Formular für Benutzer, die JavaScript deaktiviert haben.

Angenommen, Sie haben den folgenden HTML-Code:

<label for="show_textbox">Show Textbox</label>
<input id="show_textbox" type="checkbox" />
<input type="text" />

Sie können das folgende CSS verwenden, um die gewünschte Funktionalität zu erreichen:

 #show_textbox:not(:checked) + input[type=text] {display:none;}

In anderen Szenarien können Sie sich geeignete CSS-Selektoren vorstellen.

Hier ist eine Geige, um diesen Ansatz zu demonstrieren .


21

Umschalten: 0/1 oder sonst

<input type="checkbox" id="nolunch" />
<input id="checklunch />"

    $('#nolunch').change(function () {
    if ($(this).is(':checked')) {
        $('#checklunch').val('1');
    };
    if ($(this).is(':checked') == false) {
        $('#checklunch').val('0');
    };
});

19

Ich denke, es wird die einfache sein

$('#isAgeSelected').change(function() {
    if($(this).is(":checked")) {
        $('#txtAge').show();
    }
else{
        $('#txtAge').hide();
    }                                          
});
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.