2009-08-18 14 views
2

Ich habe mehrere Eingabefelder in einem Formular mit jeweils einem eindeutigen Namen. Zum Beispiel, um die Farbe zu ändern, würde ich tun:Ist es möglich, Variablen als dom-Elemente zu verwenden?

testForm.username.style.background = "yellow"; 

username sind der Name des Eingangs und testform ist der Formularname

Ich möchte, dies zu tun: ersetzen username mit einer variablen elem so, dass, wenn Ich rufe die Funktion auf, um die Hintergrundfarbe zu ändern, ich muss nicht für jedes eindeutige Feld eine separate Funktion haben. Ich würde nur den elem Namen senden und diese Funktion würde für jedes Feld funktionieren.

testForm.elem.style.background = "yellow"; 

Mein Problem ist, dass es nicht funktioniert. Zum Beispiel hat es die elem in die Funktion in Ordnung, aber es sagt, dass testForm.elem.stylenull ist. Aus irgendeinem Grund mag Javascript Variablen für Elementnamen nicht, die ich rate?

Antwort

5
var elem = 'username'; 
testForm[elem].style.background = 'yellow'; 
+1

Keine gute Idee. Der Zugriff auf eine 'elements'-Sammlung wäre zuverlässiger und standardkonform, zB:' testForm.elements [elem] .style.backgroundColor = 'yellow'' – kangax

+0

RaYell danke für die Hilfe, es funktionierte so, wie ich es wollte zu. Ich hatte den Eindruck, dass testForm [elem] .style das gleiche wie testForm.elem.style war ... rate nicht! Was ist der Vorteil der Verwendung der Elementsammlung? Wie hilft es mir anders als standardkonform zu sein? – payling

+0

Ich würde auch auf das Vorhandensein eines Elements (und seiner 'style' Eigenschaft) testen, bevor ich versuche, es zu modifizieren -' var el = testForm.Elemente [Elem]; if (el && el.style) el.style.backgroundColor = 'yellow'; ' – kangax

-3

Sie müssten ein Eval machen, um etwas zu tun, zB eval ("testform." + Elem + ".style.background = yellow");

+7

Verwenden Sie 'eval()' nicht, es gibt Ihnen nur Kopfschmerzen. Überprüfen Sie diese http://www.jslint.com/lint.html#evil – RaYell

1

versuchen

testForm [elem].style.background = "yellow"; 

oder

var elem = testForm.username 
elem.style.background = "yellow"; 

im ersten Fall elem hält den Benutzernamen, und im zweiten Fall, elem zeigt auf die tatsächliche DOM-Element.

1

Eine Eigenschaft eines JavaScript-Objekts (in diesem Fall die "username" -Eigenschaft des Objekts "testform") kann entweder mit object.property oder object["property"] Syntax zugegriffen werden. Da die zweite Form eine Zeichenfolge (wie in den Anführungszeichen angegeben) enthält, kann eine Variable, die eine Zeichenfolge enthält, ebenfalls mit dieser Syntax verwendet werden. Daraus folgt:

testform[elem].style.background = "yellow";

wird tun, was Sie wollen.

1

Es klingt wie Sie eine Funktion erstellen, um dies trotzdem zu tun. In diesem Fall, warum verwenden Sie die folgende Funktion nicht nur:

function changeBackgroundOfElementToYellow(element){ 
    element.style.background = "yellow"; 
} 

Und nennen Sie es mit:

changeBackgroundofElementToYellow(testForm.username); 

Im Allgemeinen finde ich die RaYell/kangax Methode bereits gebucht, besser zu sein, aber das ist eine andere Möglichkeit.

Verwandte Themen