2012-03-21 13 views
0

Javascriptの動作を理解できない...フォーム名と送信ボタン名を渡して、関数が渡された値を評価し、送信ボタンを無効にします。フォーム名とフォームオブジェクト名を関数に渡す

名前を明示的に使用すると機能しますが、動的に動作させたいと思います。残念ながら、私はこれらの引数を正しく使用する方法を理解していません。

今すぐ最初のドキュメントステートメントが機能します(フォーム名とボタン名が使用されます)。なぜ2番目の引数が使用されないのですか?私は警告から、フォーム名が正しくないのでそのまま使用することはできませんが、フォームに明示的に名前を付けても、正しく表示される渡されたボタン名を使用しても機能しません。

私はこれがjavascript 101でなければならないことを知っていますが、私はこの時代に遭遇し、何が得られていないのですか?誰でもこれを私に説明してくれる?

<script type="text/javascript"> 
    function aTest(formName,objName,val){ 
     if (val<5){ 
     document.aForm.aBtn.disabled=false; 
     alert(formName+" - "+objName); 
      } 
     else { 
     document.formName.objName.disabled=true; 
      } 
    }//end function aTest(formName,objName) 
</script> 

<form name="aForm"> 
<input name="testFld" type="text" onBlur="aTest(this.form,'aBtn',this.value)"> 
<input name="aBtn" type="submit" value='submit'></form> 

ありがとうございました!

答えて

2

試してみてください。

document[formName][objName].disabled = true; 

あなたには、いくつかの式の値ではなく、定数とオブジェクトのプロパティにアクセスする必要があるときは、角括弧演算子を使用しています。角括弧内の式が評価され、その値は検索するプロパティ名として扱われます。

慣用的に
if (document[formName] != null && document[formName][objName] != null) { 
    document[formName][objName].disabled = true; 
} 

以上:

さて、おそらく「formNameフォーム」は本当に、フォームの名前であることを確認するのが賢明だろう

if (document[formName] && document[formName][objName]) { 
    document[formName][objName].disabled = true; 
} 
+0

ありがとうございました!それは意味をなさない、そして偶然にも、働く!残りの唯一の質問は、フォーム名が渡されない理由です。私はthis.formが含むフォームの名前を引くだろうと思った? – jlisham

+0

最後の部分を見つけました...渡された引数を変更して、this.form.nameの代わりにthis.form.nameを呼び出すようにしました。仕事をしているようだ。助けてくれてありがとうPointy、私は最終的にこれを得ると思います! – jlisham

関連する問題