2010-12-08 7 views
0

入力テキストコントロール用のイベントハンドラを追加します。コントロールは動的に生成されます。JavaScriptでイベントハンドラを設定できません

var settings_check = new Array("checkVMName()","checkDiskMB()","checkMemMB()","checkEsx()","checkDatastore()"); 
... 
_inputbox = document.createElement("input"); 
_inputbox.type = "text"; 
_inputbox.id = settings[zindex]; 
_inputbox.onblur = settings_check[zindex]; 

_hint = document.createElement("hint"); 
_hint.id = settings[zindex] + "_Label2"; 
_hint.innerText = settings_hint[zindex]; 

mycurrent_cel2.appendChild(_inputbox); 
mycurrent_cel2.appendChild(_hint); 

しかし、この方法では動作しません:

JavaScriptの:私のコードは次のようです。私はFirebugでHTMLをチェックし、入力テキストコントロールには "onblur"属性は全く持っていませんでした。

HTML

<tr> 
    <td>....</td> 
    <td><input type="text" id="Datastore"> 
     <hint id="Datastore_Label2">start with /</hint> 
    </td> 
</tr> 

私も

_inputbox.onblur = function(){alert("test");}; 

または

_inputbox.setAttribute("onblur",func); 

Neのようにイベントハンドラを設定する他の方法を試してみましたitherは動作します。 :(

手動でonblur = function(){...}をFirebugのHTMLの入力テキストコントロールに追加して実行すると、onblurが機能します。 JavaScriptで制御?私のコードで何か問題がありますか?ありがとう。

答えて

2

あなたはそれらの関数呼び出しと文字列の配列を作成している、これは完全に間違っています。

あなたは参照を割り当てる必要がありへイベントが発生したときに呼び出す関数。配列の中に関数の名前(()または引用符を含まない)を格納するだけで、 ULD作業(機能は以前にも、現在のスコープで定義されなければならない):だから

var settings_check = [checkVMName, checkDiskMB, checkMemMB, checkEsx, checkDatastore]; 

は、本質的に、settings_checkは単に関数参照の配列です。

この概念を示すjsFiddle exampleを参照してください。

+0

ありがとう、Jacob。コードが私の家のPCにあり、私は今家にいないのであなたの提案を試していなくてもあなたが正しいと信じています。私は試してみることができます。再度、感謝します! – Landy

+0

@Landyよろしくお願いします。 –

+0

ご了承ください。コードを変更した後、提案したように関数への参照を割り当てても、コードはまだイベントハンドラを呼び出すことができませんでした。 FirebugのDOMビューでは、onblur属性が関数に割り当てられていることがわかります。しかし、それは単に呼び出すことはできません。だから私のコードに複数のエラーがあると思われる。あなたの助けを借りて、私は最初のものを修正しましたが、まだ左を描こうとしました...あなたは何か提案がありますか?私はそれについて新しい質問をすることを検討しています。ありがとう – Landy

関連する問題