Javascript 动态生成的js按钮,带有用于分配onclick函数参数的闭包
我遇到了一个以前有人发布过的问题: 但是我的代码使用的是节点,而不是innerHTML分配,因此现有的so post似乎不适用于我的代码 我想在表中动态生成HTML按钮。对于每个按钮,我想调用一个函数,其参数取决于按钮在表中的索引/位置。首先,我尝试使用lambda函数和递增的变量。这不起作用,所以我还尝试了动态命名变量,这意味着每个按钮都应该传递一个不同命名的变量来处理延迟加载效果。但这也不起作用。您可以在下面的代码中看到我尝试的两个版本: 我在下面粘贴的代码位于for循环中。在下面的示例中,我每次将I增加1。偏移量和jj在循环中保持不变Javascript 动态生成的js按钮,带有用于分配onclick函数参数的闭包,javascript,dom,closures,Javascript,Dom,Closures,我遇到了一个以前有人发布过的问题: 但是我的代码使用的是节点,而不是innerHTML分配,因此现有的so post似乎不适用于我的代码 我想在表中动态生成HTML按钮。对于每个按钮,我想调用一个函数,其参数取决于按钮在表中的索引/位置。首先,我尝试使用lambda函数和递增的变量。这不起作用,所以我还尝试了动态命名变量,这意味着每个按钮都应该传递一个不同命名的变量来处理延迟加载效果。但这也不起作用。您可以在下面的代码中看到我尝试的两个版本: 我在下面粘贴的代码位于for循环中。在下面的示例中,
var variableDynamic = i.toString();
window['variableName' + variableDynamic] = i + offset;
upvote.onclick = function() {
upVoteA(i + offset, jj);
//upVoteA(window['variableName' + variableDynamic] , jj);
};
upvote.innerHTML = "Upvote"
有人告诉我要研究闭包,因此遵循以下建议:我将onclick函数声明重写为:
upvote.onclick = function() {
var a = i + offset;
var b = kk;
function closeIt(){
upVoteA(a,b);
}
closeIt();
};
这仍然具有相同的效果,即每个按钮都使用相同的参数(即最后/最高值)调用upVoteA
我意识到我可以重构代码,将它们转换为.innerHTML set语句,然后打印变量,并将其设置为打印语句,而不是延迟加载的变量。但如果可能的话,我不想这么做。(抱歉,从技术上讲,这不是延迟加载,这个名称似乎很贴切)
有没有办法让我的代码正常工作?为什么关闭失败了?我认为闭包应该保留它们创建时所处的环境,但我的代码并非如此。“环境”的哪一部分是用闭包保存的?这是一个非常糟糕的答案,但它是有效的
var funcStr = "function dummy() { upVoteA(" + (i + offset) + "," + jj + "); }";
eval(funcStr);
upvote.onclick = dummy;
但是如果你有更好的,请告诉我