无法在javascript中设置事件处理程序

时间:2010-12-08 00:32:23

标签: 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);

两者都不起作用。 :(

如果我在带有Firebug的HTML中为输入文本控件手动添加onblur = function(){...}并执行,则onblur可以正常工作。所以问题是:如何在JavaScript中为控件设置事件处理程序?我的代码有什么问题吗?感谢。

1 个答案:

答案 0 :(得分:2)

您正在创建一个包含函数调用的字符串数组,这是完全错误的。

您需要将引用分配给您希望在事件触发时调用的函数。你只需要在数组中存储函数的名称(不带()或引号),它就可以工作(函数必须先在当前作用域中定义):

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

因此,实质上,settings_check只是一个函数引用数组。

请参阅此jsFiddle example说明此概念。