2010-12-08 56 views
0

我想爲輸入文本控件添加事件處理程序。這些控件是動態生成的。我的代碼是這樣的:無法在javascript中設置事件處理程序

的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); 

但這種方式是行不通的。我用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); 

氖ither的作品。 :(

如果我手動添加onblur = function(){...}的輸入文本控件在HTML與Firebug和執行,onblur的確如此,問題是:如何設置事件處理程序爲在JavaScript控制?這有什麼錯在我的代碼?謝謝。

回答

2

你正在創建與他們的函數調用一個字符串數組,這是完全不正確。

您需要分配引用到當事件觸發時你希望被調用的函數,你可以通過簡單地將函數的名字(不包括()或引號)存儲在你的數組中, (功能必須在當前範圍中事先定義以及)ULD工作:

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

所以,在本質上,settings_check是一個簡單的功能的引用數組。

看到這個jsFiddle example說明這個概念。

+0

謝謝雅各布。我相信你是對的,即使我沒有嘗試過你的建議,因爲代碼是在我的家用電腦中,而我現在不在家。我嘗試後會讓你知道。再次感謝! – Landy 2010-12-08 01:50:43

相關問題