2012-05-18 15 views
30

Was ist der Unterschied zwischen den beiden folgenden Nutzungen?checked = "checked" vs checked = true

document.getElementById('myRadio').checked = "checked"; 

und

document.getElementById('myRadio').checked = true; 

Für mich beide verhalten sich die gleiche Weise. Aber ich bin nur neugierig zu wissen, warum es zwei Methoden gibt, um das Gleiche zu tun.

Welches wird die ideale Verwendung sein? Ich muss IE7 und höhere Versionen unterstützen.

Antwort

40

document.getElementById('myRadio').checked ist ein boolescher Wert. Es sollte true oder false sein

document.getElementById('myRadio').checked = "checked"; wandelt die Zeichenfolge in einen booleschen Wert um, was wahr ist.

document.getElementById('myRadio').checked = true; wird nur true ohne Gießen zugewiesen.

Verwenden Sie true, da es marginal effizienter ist und den Maintainern mehr Absicht offenbart.

7

Das ursprüngliche checked Attribut (HTML 4 und vorher) erforderte keinen Wert darauf - wenn es existierte, wurde das Element "überprüft", wenn nicht, war es nicht.

Dies gilt jedoch nicht für XHTML, die HTML gefolgt 4.

Der Standard checked="checked" als Voraussetzung für echte, verwenden - so beide Weisen Sie auf dem Laufenden, die gleiche Sache am Ende tut.

Es spielt wirklich keine Rolle, welche Sie verwenden - verwenden Sie diejenige, die Ihnen am meisten Sinn macht, und bleiben Sie dabei (oder stimmen Sie mit Ihrem Team überein, welchen Weg Sie gehen).

+5

Nr In HTML 4 und früher es * hat * Wert erfordern ... es war der Name, optional war. "checked =" checked "' ist die Vollversion, aber Sie können 'checked =" 'und' "off" lassen und den Wert einfach zurücklassen. (SGML kann * komisch *! Bekommen) – Quentin

+3

Das heißt, die Frage zu fragen über die DOM-Eigenschaft, nicht die HTML-Regeln. – Quentin

+0

@Quentin - Fair genug, obwohl das fast ein Argument für die Semantik ist. – Oded

2

checked Attribut ist ein Boolescher Wert so "checked" Wert anderer "string" Ausnahme boolean false zu true umwandelt.

Alle Zeichenfolgenwerte sind wahr. Auch Vorhandensein Attribut machen es wahr:

<input type="checkbox" checked> 

Sie können es nur machen uncheked machen boolean Änderung in DOM JS.

Also die Antwort ist: sie sind gleich.

w3c

+2

Sie verwechseln die JavaScript-DOM-Eigenschaft mit dem HTML-Attribut (und verwirren in der Browser-Fehlerkorrektur ein gutes Maß). – Quentin

6

document.getElementById('myRadio') gibt Ihnen das DOM-Element zurück, ich werde es als elem in dieser Antwort verweisen.

elem.checked greift auf die Eigenschaft mit dem Namen checked des DOM-Elements zu. Diese Eigenschaft ist immer ein boolescher Wert.

Beim Schreiben von HTML verwenden Sie checked="checked" in XHTML; In HTML können Sie einfach checked verwenden. Beim Festlegen des Attributs (dies erfolgt über .setAttribute('checked', 'checked')) müssen Sie einen Wert angeben, da einige Browser einen leeren Wert für nicht vorhanden halten.

jedoch, da Sie das DOM-Element haben haben Sie keinen Grund das Attribut festlegen, da Sie einfach die verwenden können - viel bequemer - boolean Eigenschaft für sie. Da nicht leere Zeichenfolgen in einem booleschen Kontext als true betrachtet werden, wird die Einstellung elem.checked auf 'checked' oder irgendetwas anderes, das kein falscher Wert ist (selbst 'false' oder '0'), das Kontrollkästchen aktivieren. Es besteht Grund nicht nicht true und false zu verwenden, obwohl so sollten Sie mit den richtigen Werten bleiben.

5

Das Element hat sowohl ein Attribut und eine Eigenschaft namens checked. Die Eigenschaft bestimmt den aktuellen Status.

Das Attribut ist eine Zeichenfolge, und das Eigentum ist ein boolean. Wenn das Element aus dem HTML-Code erstellt wird, wird das Attribut aus dem Markup festgelegt, und die Eigenschaft wird abhängig vom Wert des Attributs festgelegt.

Wenn kein Wert für das Attribut im Markup ist, wird das Attribut null, aber die Eigenschaft ist immer entweder true oder false, so wird es false.

Wenn Sie die Eigenschaft festlegen, sollten Sie einen boolean Wert verwenden:

document.getElementById('myRadio').checked = true; 

Wenn Sie das Attribut festzulegen, verwenden Sie eine Zeichenfolge:

document.getElementById('myRadio').setAttribute('checked', 'checked'); 

Beachten Sie, dass das Attribut auch Einstellung ändert sich die Eigenschaft, aber das Festlegen der Eigenschaft ändert das Attribut nicht.

Beachten Sie auch, dass, was auch immer Wert das Attribut gesetzt, wird die Eigenschaft true. Auch wenn Sie eine leere Zeichenfolge oder null verwenden, bedeutet das Festlegen des Attributs, dass es aktiviert ist. Verwenden Sie removeAttribute das Element mit dem Attribut zu deaktivieren:

document.getElementById('myRadio').removeAttribute('checked'); 
+0

Gute Erklärung zwischen der Eigenschaft und dem Attribut. Vielen Dank! – Mac

Verwandte Themen