2009-08-18 1 views
2

私は一意の名前を持つフォームに複数の入力フィールドを持っています。たとえば、色を変更するために私がするだろう。そうする場合、その変数elemusernameを置き換える:dom要素として変数を使用することはできますか?

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

username

が、私はこれをしたいフォーム名が入力されの名前とtestformています私は背景色を変更する関数を呼び出します。私はすべての固有のフィールドに対して別々の関数を持つ必要はありません。私はちょうどelemの名前を送信し、その機能はすべてのフィールドで機能するだろう。

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

私の問題は動作しません。たとえば、elemを関数fineに渡しましたが、testForm.elem.stylenullとなります。何らかの理由で、javascriptは私が推測している要素名の変数を好きではありませんか?

答えて

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

良い考えではありません。 'elements'コレクションからそれにアクセスすることはより信頼性が高く、標準に準拠します:' testForm.elements [elem] .style.backgroundColor = 'yellow'' – kangax

+0

RaYellは助けてくれてありがとうに。私はtestForm [elem]スタイルがtestForm.elem.styleと同じであったという印象を受けました。 要素コレクションを使用する利点は何ですか?標準に準拠している以外の方法は私にどのように役立ちますか? – payling

+0

私は要素を修正しようとする前に、要素(と 'style'プロパティ)の存在をテストします。' var el = testForm。要素[elem]; if(el && el.style)el.style.backgroundColor = 'yellow'; ' – kangax

-3

eval( "testform。" + elem + ".style.background = yellow")などのようなことをするには、evalを実行する必要があります。

+7

'eval()'は使わないでください。頭痛を与えるだけです。これをチェックしてください。http://www.jslint.com/lint.html#evil – RaYell

1

は、最初のケースで

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

又は

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

を試みるelemユーザ名を保持し、実際のDOMエレメントへの第2の場合には、elemポイント。

1

object.propertyまたはobject["property"]の構文を使用して、JavaScriptオブジェクトのプロパティ(この場合は "testform"オブジェクトの "username"プロパティ)にアクセスできます。 2番目の形式では文字列(二重引用符で示す)が使用されるため、文字列を含む変数もその構文で使用できます。したがって:

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

あなたが望むことを行います。

1

とにかくこれを行う機能を作成しているようです。その場合には、その理由だけで、次の機能は使用しない:

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

をし、それを呼び出します。一般的には

changeBackgroundofElementToYellow(testForm.username); 

私はRaYell/kangax方法が優れていることが既に掲載見つけるが、これは別ですオプション。

関連する問題