Ist einer dieser mehr vorzuziehen als der andere? Warum? Was ist mit Leistung - wenn diese tausende Male aufgerufen werden?
%Vor%Beide scheinen ein Eingabeelement [Text] in FF 4 zu deaktivieren.
Im Allgemeinen ...
Verwenden Sie Eigenschaften. Lange Zeit (bis zur Version 7 oder 8 IIRC) hatte Internet Explorer eine schwer beschädigte Implementierung von setAttribute
, die die Eigenschaft nicht als Attribut festlegen würde (der klassische Fehlerpunkt war class
, da keine class
-Eigenschaft vorhanden ist. es ist className
).
In diesem Fall ist insbesondere ... element.setAttribute("disabled", true);
falsch. Es sollte element.setAttribute("disabled", "disabled");
element.setAttribute("disabled", some_bool)
funktioniert nicht so, wie Sie denken. Insbesondere, standardmäßig, ist disabled
ein sogenanntes boolesches Attribut ; seine Anwesenheit, ungeachtet ihres Wertes, macht es wahr. disabled=""
, disabled="disabled"
, disabled="true"
und sogar disabled="false"
(!!!) bedeuten in den meisten Browsern dasselbe. (Obwohl die letzten beiden tatsächlich ungültiges HTML sind, werden die meisten Browser sie aus Echtheitsgründen als äquivalent zu disabled="disabled"
betrachten. Einschließlich jeder der großen Vier.) Sie setzen ein boolesches Attribut auf true, indem Sie einen Wert setzen - einen beliebigen Wert, even Wenn es falsch ist - und Sie setzen es auf false, indem Sie das Attribut vollständig entfernen.
Wenn Ihnen der tatsächliche Zeichenfolgenwert des Attributs wichtig ist (was in diesem Fall nicht der Fall sein sollte) und insbesondere, wenn das Attribut nicht bereits über das DOM verfügbar ist (dh es hat keine entsprechende Eigenschaft) ), dann (get/set)Attribute
verwenden. In den meisten Fällen (vor allem wenn Sie sich darum kümmern, wie das Element beeinflusst wird, wie in diesem Fall, wenn Sie versuchen, ein Element zu deaktivieren), verwenden Sie die DOM-Eigenschaft.
IE benötigt einige Attribute, die mit setAttribute
gesetzt werden, aber nicht alle. Ich habe jedoch keine Liste, Sie müssen nur überprüfen, ob es funktioniert oder nicht. Wenn Sie setAttribute
verwenden, wird das Attribut ebenfalls in das DOM eingefügt, sodass es beim Ausführen von view source angezeigt werden kann.
Nur ein Tipp: element.setAttribute ('class', xxx) funktioniert in einigen IE-Versionen nicht.
Bevorzugt stattdessen element.className = xxx
Tags und Links javascript dom