2012-02-16 13 views
0

要素のonFocusイベントでパラメータを受け入れる関数を呼び出そうとしています。さらに、onFocusイベントハンドラをそのフォームのすべての要素でバインドしようとしています。ここに私のコードです。このコードは動作していないパラメータでイベントをバインドする

var f=document.getElementById("form1"); 
for(i=0;i<f.length-1;i++) 
{ 
f.elements[i].onFocus=help(i); 
} 

function help(i) 
{ 
Var help=new Array("Help for name","Help for age", "help for gender"); 
document.getElementById("cmt").value=help[i]; 
} 

<!--HTML Code--> 
<form name="form1" id="form1"> 
<input type="text" name="name"/> 
<input type="text" name="age"/> 
<input type="text" name="gender"/> 
<textarea id="cmt" multiline="multiline"></textarea> 
</form> 

はここjavascriptのコードです。私は大文字と小文字の区別のすべてのバリエーションを試したので、答えがそれに関連している場合は答えません。このコードは、イベントハンドラを要素にバインドしておらず、関数helpを3回呼び出して、textareaの値がiの最終値として設定されています。ありがとう

+0

おそらく 'f.children'をお探しでしたか? –

+0

しかし、私はフォーム要素だけを探しています。フォームタグ内のラベルとtdタグも子として呼び出されますが、inputとtextarea要素だけが必要です。要素は属性を抽出するためにアクセス可能です。問題はイベントバインディングにあります。 – Sourabh

答えて

0

あなたのコードにいくつかのバグがあります。

  1. イベントハンドラ名は "onFocus"ではなく "onfocus"です。

  2. "onfocus = help"のように単に名前を渡すのではなく、 "onfocus"イベントハンドラに割り当てるときにhelpを呼び出しています。

  3. このようにonfocusに代入するだけで、ヘルプ関数に引数を渡すことはできません。あなたはそのような目的のために閉鎖を使用しなければなりません。しかし、それはより混乱し、あなたの要件の適切な解決策ではありません。その代わりに、ヘルプ機能でブラウザから渡されたイベントオブジェクトを使用してターゲット要素を確認することができます。

ここはjsfiddleのリンクです。それがあなたを助けることを願っています。 http://jsfiddle.net/parth1403/N9t5J/

関連する問題