1


这是我的第一个问题,可能确实很愚蠢:)

我从 GM_listValues() 返回的数组中有一组值。
当我遍历集合时,我想动态创建调用函数以删除存储值并重新加载页面的按钮。

deleteB.addEventListener("click", function() {deleteTrip(names[i]);pageSelect();}, false);

以上是我用来将事件附加到按钮 ( deleteB) 的行。但是,当我按下按钮时,javascript 会尝试使用names计数变量 ( i) 访问 listValues () 数组。自然,这将不存在,因为循环现在已经完成,并且names无论如何都不是全局的。

我想知道的是是否有办法names[i]在我在按钮中创建函数时复制字符串值,以便不需要names[i]在代码中引用。

我知道这可能是一个非常简单的答案,但它让我很难过,这是我第一次使用 javascript。

提前致谢。

4

2 回答 2

2

使用闭包来记住值;

function createDeleteFunc(name) {
  return function(){deleteTrip(name);pageSelect();}
}

for() {
...
deleteB.addEventListener("click", createDeleteFunc(names[i]), false);
...
}
于 2011-04-15T16:31:02.193 回答
0

问题是您创建的所有函数都引用相同的i变量。当他们被调用时,他们尝试删除names[i],但i现在等于names.length所以它不起作用。

names[i]解决方案是为每个函数单独引用。这通常是通过闭包来完成的(à-la Paul's answer)

于 2011-04-15T20:28:01.343 回答