4580 Stimmen

Einstellung "checked" für ein Kontrollkästchen mit jQuery

Ich würde gerne so etwas tun, um ein Häkchen bei checkbox mit jQuery :

$(".myCheckBox").checked(true);

o

$(".myCheckBox").selected(true);

Gibt es so etwas?

0 Stimmen

Eine spezifischere (und sehr nützliche!) Frage, "Wie überprüfe ich ein Element in einem Kontrollkästchen, das nach Wert gesetzt ist?", können wir auch hier diskutieren, und ich habe eine Antwort unten gepostet.

0 Stimmen

Weitere Möglichkeiten, dies mit jQuery zu tun, finden Sie hier stackoverflow.com/a/22019103/1868660

0 Stimmen

Wenn Sie das onchange-Ereignis auslösen müssen, ist es $("#mycheckbox").click();

6428voto

Xian Punkte 74901

Modernes jQuery

Utilice .prop() :

$('.myCheckbox').prop('checked', true);
$('.myCheckbox').prop('checked', false);

DOM-API

Wenn Sie nur mit einem Element arbeiten, können Sie immer nur auf die zugrunde liegende HTMLInputElement und ändern seine .checked Eigentum:

$('.myCheckbox')[0].checked = true;
$('.myCheckbox')[0].checked = false;

Der Vorteil der Verwendung des .prop() y .attr() Methoden ist, dass sie auf alle übereinstimmenden Elemente wirken.

jQuery 1.5.x und niedriger

El .prop() Methode ist nicht verfügbar, daher müssen Sie die .attr() .

$('.myCheckbox').attr('checked', true);
$('.myCheckbox').attr('checked', false);

Beachten Sie, dass es sich hierbei um der Ansatz, der von den Unit-Tests von jQuery vor Version 1.6 verwendet wurde und ist vorzuziehen gegenüber der Verwendung von $('.myCheckbox').removeAttr('checked'); da letztere, wenn das Kästchen ursprünglich markiert war, das Verhalten eines Aufrufs von .reset() auf jedem Formular, das es enthält - eine subtile, aber wahrscheinlich unerwünschte Verhaltensänderung.

Für mehr Kontext, eine unvollständige Erörterung der Änderungen bei der Handhabung der checked Attribut/Eigenschaft beim Übergang von 1.5.x zu 1.6 finden Sie in der Version 1.6 Versionshinweise y el Attribute vs. Eigenschaften Abschnitt der .prop() Dokumentation .

1 Stimmen

Ja, das ist die Einstellung des Attributwerts, und die Deaktivierung des Attributs. Ich habe meine Antwort aktualisiert, um dies zu zeigen.

29 Stimmen

@Xian das Entfernen des Attributs "checked" macht es unmöglich, das Formular zurückzusetzen

1 Stimmen

Das Problem dabei ist, dass Sie etwas brauchen, das für beide Versionen funktioniert. In diesem Fall können Sie das Plugin verwenden :) Vielen Dank für das Update!

780voto

bchhun Punkte 17426

Verwendung:

$(".myCheckbox").attr('checked', true); // Deprecated
$(".myCheckbox").prop('checked', true);

Und wenn Sie prüfen wollen, ob ein Kontrollkästchen aktiviert ist oder nicht:

$('.myCheckbox').is(':checked');

4 Stimmen

Auch $(selector).checked, um zu prüfen, ob das Häkchen gesetzt ist

6 Stimmen

Ich habe genau diesen Code ausprobiert und er hat bei mir nicht funktioniert, wenn es sich um ein Kontrollkästchen zum Auswählen aller bzw. zum Auswählen keiner Optionen handelt, das sowohl alle Optionen als auch ihren Status überprüfen muss. Stattdessen versuchte ich @Christopher Harris' Antwort und das tat den Trick.

0 Stimmen

Warum verwenden Sie "form #mycheckbox" statt einfach "#mycheckbox"? Die ID ist bereits im gesamten Dokument eindeutig, es ist schneller und einfacher, sie direkt zu wählen.

359voto

cwharris Punkte 17356

Dies ist der korrekte Weg, um mit jQuery Kontrollkästchen zu aktivieren und zu deaktivieren, da dies ein plattformübergreifender Standard ist. wird die Wiederveröffentlichung von Formularen erlauben.

$('.myCheckBox').each(function(){ this.checked = true; });

$('.myCheckBox').each(function(){ this.checked = false; });

Auf diese Weise verwenden Sie JavaScript-Standards für das Aktivieren und Deaktivieren von Kontrollkästchen, so dass jeder Browser, der die Eigenschaft "checked" des Kontrollkästchen-Elements korrekt implementiert, diesen Code einwandfrei ausführen kann. Diese sollte in allen gängigen Browsern, aber ich kann keine Tests vor Internet Explorer 9 durchführen.

Das Problem (jQuery 1.6):

Sobald ein Benutzer auf ein Kontrollkästchen klickt, reagiert dieses Kontrollkästchen nicht mehr auf Änderungen des Attributs "checked".

Hier ist ein Beispiel dafür, dass das Attribut "checkbox" seine Aufgabe nicht erfüllt, nachdem jemand angeklickt das Kontrollkästchen (dies geschieht in Chrome).

Fiddle

Die Lösung:

Durch die Verwendung der JavaScript-Eigenschaft "checked" für die DOM Elementen können wir das Problem direkt lösen, anstatt zu versuchen, das DOM so zu manipulieren, dass es tut, was wir wollen. wollen es zu tun.

Fiddle

Dieses Plugin ändert die Eigenschaft "checked" aller Elemente, die mit jQuery ausgewählt wurden, und aktiviert und deaktiviert Kontrollkästchen unter allen Umständen. Auch wenn dies wie eine übermäßige Lösung erscheinen mag, wird es die Benutzerfreundlichkeit Ihrer Website verbessern und dazu beitragen, Frustration bei den Benutzern zu vermeiden.

(function( $ ) {
    $.fn.checked = function(value) {
        if(value === true || value === false) {
            // Set the value of the checkbox
            $(this).each(function(){ this.checked = value; });
        } 
        else if(value === undefined || value === 'toggle') {
            // Toggle the checkbox
            $(this).each(function(){ this.checked = !this.checked; });
        }

        return this;
    };
})( jQuery );

Wenn Sie kein Plugin verwenden möchten, können Sie alternativ auch die folgenden Codeschnipsel verwenden:

// Check
$(':checkbox').prop('checked', true);

// Un-check
$(':checkbox').prop('checked', false);

// Toggle
$(':checkbox').prop('checked', function (i, value) {
    return !value;
});

5 Stimmen

In Ihrem ersten JSFiddle-Beispiel sollten Sie Folgendes verwenden removeAttr('checked') statt attr('checked', false)

4 Stimmen

@DanielXMoore, Du umgehst das Thema. Das Beispiel sollte zeigen, dass der Browser nach dem Anklicken des Kontrollkästchens durch den Benutzer nicht mehr auf checked Attributänderungen, trotzdem der Methode, mit der sie geändert werden.

4 Stimmen

@ChristopherHarris Ok, Sie haben recht, das habe ich übersehen. Ab jQuery 1.6 sollten Sie die .prop-Methode aber nicht verwenden? $('.myCheckBox').prop('checked', true) Auf diese Weise wird es automatisch auf die gesamte Menge der übereinstimmenden Elemente angewendet (nur beim Festlegen, das Erhalten ist immer noch nur das erste)

166voto

Micah Punkte 106323

Das können Sie tun

$('.myCheckbox').attr('checked',true) //Standards compliant

o

$("form #mycheckbox").attr('checked', true)

Wenn Sie benutzerdefinierten Code im onclick-Ereignis für das Kontrollkästchen haben, den Sie auslösen möchten, verwenden Sie stattdessen diesen:

$("#mycheckbox").click();

Sie können die Markierung aufheben, indem Sie das Attribut vollständig entfernen:

$('.myCheckbox').removeAttr('checked')

Sie können alle Kästchen wie folgt ankreuzen:

$(".myCheckbox").each(function(){
    $("#mycheckbox").click()
});

0 Stimmen

Sie können auch $("#myTable input:checkbox").each(...) verwenden;

0 Stimmen

Sie können auch gehen $(".myCheckbox").click()

3 Stimmen

@Michah das Entfernen des Attributs "checked" macht es unmöglich, das Formular zurückzusetzen

87voto

livefree75 Punkte 873

Sie können das $.fn-Objekt auch mit neuen Methoden erweitern:

(function($)  {
   $.fn.extend({
      check : function()  {
         return this.filter(":radio, :checkbox").attr("checked", true);
      },
      uncheck : function()  {
         return this.filter(":radio, :checkbox").removeAttr("checked");
      }
   });
}(jQuery));

Dann können Sie es einfach tun:

$(":checkbox").check();
$(":checkbox").uncheck();

Oder Sie können ihnen eindeutige Namen wie mycheck() und myuncheck() geben, falls Sie eine andere Bibliothek verwenden, die diese Namen benutzt.

5 Stimmen

@livfree75 das Entfernen des Attributs "checked" macht es unmöglich, das Formular zurückzusetzen

5 Stimmen

Diese Antwort ist veraltet, denn sie verwendet .attr anstelle von .prop .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X