将Greasemonkey沙箱中的值传递给匿名函数

时间:2011-04-15 16:13:19

标签: javascript greasemonkey addeventlistener userscripts


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

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

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

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

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

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

提前致谢。

2 个答案:

答案 0 :(得分:2)

使用闭包记住值;

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

for() {
...
deleteB.addEventListener("click", createDeleteFunc(names[i]), false);
...
}

答案 1 :(得分:0)

问题是您创建的所有函数都引用相同的i变量。调用它们后,它们会尝试删除names[i],但i现在等于names.length,因此无效。

解决方案是为每个函数单独引用names[i]。这通常是通过关闭(保罗的答案)来完成的