这是我的第一个问题,可能确实非常愚蠢:)
我从GM_listValues()返回的数组中有一些值。
当我遍历集合时,我想动态创建调用函数的按钮来删除存储的值,然后重新加载页面。
deleteB.addEventListener("click", function() {deleteTrip(names[i]);pageSelect();}, false);
以上是我用来将事件附加到按钮(deleteB
)的行。但是,当我按下按钮时,javascript尝试使用count变量(names
)访问listValues(i
)数组。当然,这不会存在,因为循环现在已经完成,并且names
无论如何都不是全局的。
我想知道的是,当我在按钮中创建函数时,是否有办法复制names[i]
的字符串值,以便不需要引用names[i]
代码。
我知道这可能是一个非常简单的答案,但它让我感到难过,这是我第一次使用javascript工作。
提前致谢。
答案 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]
。这通常是通过关闭(保罗的答案)来完成的