JS .checked vs jquery attr ('geprüft'), was ist der Unterschied?

8

Ich kann das nicht herausfinden. Laut W3-Schulen , setzt die geprüfte Eigenschaft den aktivierten Status eines Kontrollkästchens oder gibt diesen zurück.

Warum funktioniert $('input').checked ? $('div').slideDown() : $('div').slideUp(); nicht?

Die Verwendung von prop funktioniert jedoch.

$('input').prop('checked') ? $('div').slideDown() : $('div').slideUp();

Dies ist für ein Kontrollkästchen, das basierend auf einem Datenbankwert überprüft wird.

    
Jacob Raccuia 26.02.2013, 04:26
quelle

5 Antworten

11

checked ist eine DOM-Element-Eigenschaft, also verwende sie für DOM-Elemente anstelle von jQuery-Objekten.

%Vor%

Wenn Sie ein jQuery-Objekt haben, verwenden Sie prop anstelle von attr , da Sie eine Eigenschaft überprüfen. Nur als Referenz:

%Vor%

Während [0].getAttribute("checked") den tatsächlichen Wert zurückgibt.

prop gibt true oder false basierend darauf zurück, ob das Attribut überhaupt existiert oder nicht

    
Dennis 26.02.2013, 04:28
quelle
4

checked ist eine Eigenschaft des DOM-Objekts, nicht des jQuery-Objekts. Damit es funktioniert, müssen Sie das DOM-Objekt abrufen:

%Vor%

Du könntest auch .is(':checked') machen.

    
Blender 26.02.2013 04:27
quelle
4

In diesem Fall brauchen Sie prop() anstatt attr() , Das Ersetzen von Aufrufen von attr() mit prop() in Ihrem Code wird im Allgemeinen funktionieren.

Von Ссылка

Der Unterschied zwischen Attributen und Eigenschaften kann in bestimmten Situationen wichtig sein. Vor jQuery 1.6 berücksichtigte die .attr() -Methode manchmal Eigenschaftswerte beim Abrufen einiger Attribute, was zu inkonsistentem Verhalten führen konnte. Ab jQuery 1.6 bietet die Methode .prop() eine Möglichkeit zum expliziten Abrufen von Eigenschaftswerten, während .attr() Attribute abruft.

elem.checked ==== true (Boolean) Ändert sich mit dem Kontrollkästchenstatus

$(elem).prop("checked") ==== true (Boolean) Ändert sich mit dem Kontrollkästchenstatus

elem.getAttribute("checked") ===== "checked" (String) Anfangszustand des Kontrollkästchens; ändert sich nicht

$(elem).attr("checked") (1.6) ===== "checked" (String) Anfangszustand des Kontrollkästchens; ändert sich nicht

$(elem).attr("checked") (1.6.1+) ======== "checked" (String) Ändert sich mit Checkbox-Status

$(elem).attr("checked") (pre-1.6) ======= true (Boolean) Geändert mit Checkbox-Status

Auch diese URL hilft Ihnen mehr über Ihre Abfragen .prop () vs .attr ()

Ein Unterschied von /is-checked-vs-attr-checked-checked/7 auf Ссылка

Auch zu verstehen The elements atttribute and properties verweisen Ссылка Ссылка

    
Rohan Kumar 26.02.2013 05:04
quelle
0

$ ('input') gibt ein JQuery-Objekt zurück und hat keine checked-Eigenschaft. Sie können $ ('input') [0] .checked.

verwenden     
phnkha 26.02.2013 04:29
quelle
0

$('input').attr('checked') ist veraltet und man sollte $('input').prop('checked')
verwenden Außerdem wird $('input').checked nicht funktionieren, da $('input') das jquery-Objekt ist und checked die Eigenschaft ist. Deshalb hat jquery $('input').prop('checked') für den Zugriff auf die Eigenschaft erstellt.

Um das jQuery-Objekt in ein DOM-Objekt zu konvertieren, müssen Sie jedoch Folgendes tun: $('input')[0].checked Dies wird zum DOM-Objekt und Sie können dann direkt auf die Eigenschaft mit .

zugreifen

Aber mit jquery, um auf die Eigenschaft zuzugreifen, sollte man dies verwenden:

%Vor%

Hoffe das hilft !!

    
asifsid88 26.02.2013 04:31
quelle

Tags und Links