我想为输入文本控件添加一个事件处理程序。控件是动态生成的。我的代码就像:
的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);
两者都不起作用。 :(
如果我在带有Firebug的HTML中为输入文本控件手动添加onblur = function(){...}并执行,则onblur可以正常工作。所以问题是:如何在JavaScript中为控件设置事件处理程序?我的代码有什么问题吗?感谢。
答案 0 :(得分:2)
您正在创建一个包含函数调用的字符串数组,这是完全错误的。
您需要将引用分配给您希望在事件触发时调用的函数。你只需要在数组中存储函数的名称(不带()
或引号),它就可以工作(函数必须先在当前作用域中定义):
var settings_check = [checkVMName, checkDiskMB, checkMemMB, checkEsx, checkDatastore];
因此,实质上,settings_check
只是一个函数引用数组。
请参阅此jsFiddle example说明此概念。