2011-04-15 37 views
1


这是我的第一个问题,可能很无聊确实:)传递值从Greasemonkey的沙箱成匿名函数

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

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

以上是我使用的事件附加到按钮(deleteB)就行了。但是,当我按下按钮时,JavaScript尝试使用count变量(i)访问listValues数组(names)。当然,这不会存在,因为循环已经完成,并且names不是全球性的。

我想知道的是,当我在按钮中创建函数时,如果有方法复制字符串值names[i],以便不需要在代码中参考names[i]

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

在此先感谢。

回答

2

使用闭合值来记住值;

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

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

对不起,延迟,我在周末没有上网。感谢您的解决方案,它完美运作。我将来必须记住的东西! – Hjordan 2011-04-18 08:45:00

0

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

解决方案是为每个函数分别引用names[i]。这通常是关闭(保尔的答案)