DOM 'deaktiviert' - Eigenschaft in javascript
Ich kann nicht finden eine definitive Antwort zur Benutzung der Behinderten-Eigenschaft zum deaktivieren von Formular-Elementen in javascript.
Einige Orte sagen, es ist eine einfache boolean-Wert. Andere sagen, dass, um es an den string-Wert 'deaktiviert' zu deaktivieren, leeren string " zu aktivieren. Oder gibt es das hinzufügen und entfernen das disabled-Attribut, in der Regel in Kombination mit einem string-Wert.
Also, was ist der richtige Weg, es zu tun cross-browser? (ohne jQuery).
Wie haben etwas so einfaches wie ein enable-flag so geschlachtet?
-- edit --
Sorry, ich sollte erwähnt haben, entwickle ich für den IE8 (nicht durch Wahl).
- Ist es nicht geschlachtet. Sie brauchen nur zu verstehen, den Unterschied zwischen Eigenschaften und Parametern.
- Ich bin nicht einverstanden. Die Entscheidung, die deaktiviert ein Attribut statt einer Immobilie war der Fehler.
- Es ist nicht eine Sache der einen oder der anderen. HTML-Attribute hat. Der DOM verfügt über Eigenschaften, die mit den Attributen wird separat modelliert. Viele HTML-Attribute übersetzt werden, um DOM-element-Eigenschaften. Das ist, wo Sie brauchen, um den Unterschied zu verstehen.
- element.removeAttribute('disabled') oder element.disabled=false beide funktionieren im IE8, aber für ältere ie-erfordert, den zweiten (Eigentums -) übertragung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den folgenden Eingabe-Elemente sind alle deaktiviert:
HTML:
Wenn ein boolean-Attribut vorhanden ist, ist es, sonst ist es aus. Der Wert bedeutet nichts.
Jedoch beim Umgang mit diesen Elementen über javascript, verwenden Sie das entsprechende Eigenschaft, d.h.:
Wird die Eigenschaft aktualisieren Sie das Attribut für Sie. Dies gilt für alle boolean-Attribut /Eigenschaft-Paaren, d.h.:
readonly
,checked
,selected
usw.Verwirrung möglicherweise ergeben sich aus der Tatsache, dass
setAttribute()
fordert für beide einen Namen und einen Wert und gibt markup in einemkey="value"
format-auch wenn Sie nicht möchten, dass Sie einen Wert ein. Beim hinzufügen einer benutzerdefinierten booleschen Attribut, das ich einfach das Attribut ohne Wert (Beispiel):Siehe
document.createAttribute()
undElement.setAttributeNode()
.<input disabled="false">
im Grunde ist das HTML liegen. Tun Sie das nicht. Vermeidendisabled="true"
als auch, wenn auch nur, um den Kopf ab, den Gedankenprozess von "gut, wenntrue
ist es deaktiviert...".disabled="true"
unddisabled="false"
sind einfach ungültiges HTML.Den
.disabled
Eigenschaft von DOM-Elementen ist ein boolescher Wert und sollte erhalten Boolesche Werte zugewiesen.Den
disabled
HTML-Attribut, wie im markup odersetAttribute()
ist eine "boolean html-Attribut" was bedeutet, es kann die Werte leer,disabled
oder weggelassen werden. Siehe auch HTML - Warum boolean-Attribute nicht haben " boolean-Wert? und Der korrekte Wert für disabled-Attribut.Den
disabled
Attribut ist ein boolescher Wert. Wenn das tag vorhanden ist, wird die Eingabe deaktiviert werden. Die Verwirrung, um mit einem string-Wert zugeordnet ist, es kommt in der Regel XHTML-Validierung. In XHTML-Attribut-Minimierung ist verboten, also muss es einen Wert haben, und XHTML-Spezifikation heißt es, es mussdisabled="disabled"
.Für alle browser, wenn der tag vorhanden ist, der Eingang wird deaktiviert, unabhängig von der string-Wert.
JsFiddle Demo
w3c-disabled-Attribut spec
Die Existenz der Eigenschaft ist genug, um den trigger mit dem Status deaktiviert.
Wenn Sie müssen einen Wert für die Eigenschaft ein, dann sollte es der gleiche sein wie der name der Eigenschaft e.g
disabled="disabled"
.Ich werde versuchen, die Dokumentation, die auf die spezifischen Verhaltensweisen der Browser, und der relevanten Spezifikationen.
--edit--
Die HTML5-Spezifikation umfasst Boolesche Attribute, wie z.B. Behinderte, hier: http://www.w3.org/html/wg/drafts/html/master/infrastructure.html#boolean-attributes
In der Praxis, web-Browser ignorieren den zugewiesenen Wert und achten Sie einfach auf das Vorhandensein des Attributs.
Einstellung von disabled auf true funktioniert auf allen input-Typen. Ich habe es ausprobiert in chrome,firefox,ie Kante. Versuchen Sie dieses;