我试图创造"动态"级联的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循环当前有效,但在输入第二个字段后无效。
任何帮助都将不胜感激。
注意:这不是关于变量或将变量传递给函数的问题,而是向数组添加事件侦听器。明确的答案是正确的答案。
答案 0 :(得分:1)
您可以使用Array.prototype.forEach()
,并且在您传入的函数中,您可以为处理第一个元素的情况设置一个警卫:
fields.forEach(attachChangeHandler);
function attachChangeHandler(field, i) {
if (i === 0) { return; }
field.change(function() {
populateFields(i + 1, i, xml);
});
}