2009-08-18 5 views
2

J'ai plusieurs champs de saisie dans un formulaire ayant chacun un nom unique. Par exemple, pour changer la couleur que je ferais:Est-il possible d'utiliser des variables en tant qu'éléments dom?

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

username étant le nom de l'entrée et testform étant le nom du formulaire

Je veux faire: remplacer username avec une elem variable de sorte que lorsque J'appelle la fonction pour changer la couleur de fond je n'ai pas besoin d'avoir une fonction séparée pour chaque champ unique. Je voudrais juste envoyer le nom elem et cette fonction fonctionnerait pour tous les domaines.

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

Mon problème est que cela ne fonctionne pas. Par exemple il a passé le elem dans la fonction bien, mais il dit que testForm.elem.style est null. Pour une raison quelconque, javascript n'aime pas les variables pour les noms d'éléments que je devine?

Répondre

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

Pas une bonne idée. L'accès à partir d'une collection 'elements' serait plus fiable et conforme aux normes, par exemple:' testForm.elements [elem] .style.backgroundColor = 'yellow'' – kangax

+0

RaYell merci pour l'aide, ça a fonctionné comme je le voulais à. J'avais l'impression que testForm [elem] .style était le même que testForm.elem.style ... ne le devinez pas! Quel est l'avantage d'utiliser la collection d'éléments? En quoi cela m'aide-t-il autrement que d'être conforme aux normes? – payling

+0

Je voudrais également tester l'existence d'un élément (et de sa propriété 'style') avant de tenter de le modifier -' var el = testForm.éléments [elem]; if (el && el.style) el.style.backgroundColor = 'jaune'; ' – kangax

-3

Vous devriez faire un eval pour faire quelque chose comme ça, par exemple eval ("testform." + Elem + ".style.background = yellow");

+7

N'utilisez pas 'eval()', cela ne vous donnera qu'un mal de tête. Vérifiez cela http://www.jslint.com/lint.html#evil – RaYell

1

essayer

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

ou

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

dans le premier cas elem maintient le nom d'utilisateur, et dans le second cas, elem pointe vers l'élément de DOM réelle.

1

Une propriété d'un objet JavaScript (dans ce cas, la propriété "username" de l'objet "testform") est accessible en utilisant la syntaxe object.property ou object["property"]. Comme la deuxième forme prend une chaîne (comme indiqué par les guillemets doubles), il s'ensuit qu'une variable contenant une chaîne peut également être utilisée avec cette syntaxe. Par conséquent:

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

fera ce que vous voulez.

1

Il semble que vous créiez une fonction pour ce faire de toute façon. Dans ce cas, pourquoi ne pas simplement utiliser la fonction suivante:

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

Et appelez avec:

changeBackgroundofElementToYellow(testForm.username); 

En général, je trouve la méthode RaYell/de kangax affiché déjà mieux, mais cela est une autre option.

Questions connexes