将.change()添加到js Array()中的每个变量;

时间:2017-01-27 01:18:02

标签: javascript arrays xml addeventlistener

我试图创造&#34;动态&#34;级联的Dropbox,我几乎完成了它。但是,我遇到了一个问题,即在包含.change()字段ID的数组内的每个变量上添加<select>侦听器。

所以,如果我使用:

fields[0].change(function() {populateFields(1, 0, xml);});
fields[1].change(function() {populateFields(2, 1, xml);});

代码完美无缺。但是,我更喜欢使用这样的东西:

for (i=1; i<numberOfFields; i++){
            p = i-1; current = i;
            fields[p].change(function() {populateFields(current, p, xml);});
        }

这样我可以拥有可变数量的字段,因为当前代码仅限于三个字段。 for循环当前有效,但在输入第二个字段后无效。

任何帮助都将不胜感激。

注意:这不是关于变量或将变量传递给函数的问题,而是向数组添加事件侦听器。明确的答案是正确的答案。

1 个答案:

答案 0 :(得分:1)

您可以使用Array.prototype.forEach(),并且在您传入的函数中,您可以为处理第一个元素的情况设置一个警卫:

fields.forEach(attachChangeHandler);

function attachChangeHandler(field, i) {
  if (i === 0) { return; }
  field.change(function() {
    populateFields(i + 1, i, xml);
  });
}