gpt4 book ai didi

javascript - 动态生成带有闭包的js按钮来分配onclick函数参数

转载 作者:行者123 更新时间:2023-11-28 07:41:54 27 4
gpt4 key购买 nike

我遇到了人们之前发布过的问题:JavaScript dynamic parameters

但是我的代码使用节点而不是innerHTML分配,因此现有的SO帖子似乎不适用于我的代码。

我想在表格中动态生成 HTML 按钮。对于每个按钮,我想调用一个函数,其参数取决于按钮在表中的索引/位置。首先,我尝试仅将 lambda 函数与我要递增的变量一起使用。这不起作用,所以我还尝试了动态命名变量,这意味着每个按钮都应该传递一个不同命名的变量来处理延迟加载效果。但这也不起作用。您可以在下面的代码中看到我尝试过的两个版本:

我在下面粘贴的这段代码位于 for 循环中。下面,我每次将 i 加 1。 offset 和 jj 在循环内保持不变。

var variableDynamic = i.toString();
window['variableName' + variableDynamic] = i + offset;

upvote.onclick = function() {
upVoteA(i + offset, jj);
//upVoteA(window['variableName' + variableDynamic] , jj);
};
upvote.innerHTML = "Upvote"

有人告诉我要研究关闭问题,所以遵循这个建议:http://www.usepatterns.com/blog/javascript-closures我将 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;

但是如果您有更好的东西,请告诉我。

关于javascript - 动态生成带有闭包的js按钮来分配onclick函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27915167/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com