Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/479.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在onclick函数中为循环生成的元素传递值_Javascript_Onclicklistener - Fatal编程技术网

Javascript 在onclick函数中为循环生成的元素传递值

Javascript 在onclick函数中为循环生成的元素传递值,javascript,onclicklistener,Javascript,Onclicklistener,我想为生成的链接向onClick函数传递一个参数(resultset中的字符串) 现在我有这个: for (var i=0; i<response.data.length; i++){ var attend= document.createElement("a"); var name = response.data[i].name; attend.innerHTML="Add event"; attend.addEventListener("

我想为生成的链接向onClick函数传递一个参数(resultset中的字符串)

现在我有这个:

for (var i=0; i<response.data.length; i++){
      var attend= document.createElement("a");
      var name = response.data[i].name;
      attend.innerHTML="Add event";
      attend.addEventListener("click", function() {saveEvent(name);}, false);
      document.getElementsByClassName("event")[i].appendChild(attend);
}

用于(var i=0;i这是因为正在围绕
name
变量创建一个闭包。这使得该变量保存的数据在所有事件处理程序函数之间共享。您总是看到最后一个元素的
name
的原因是,当循环完蛋了

您需要在每次循环迭代时传递该数据的副本。将代码更改为对变量声明使用而不是
var
,以便在每次循环迭代时,
name
将有自己的作用域

闭包可能是一个很难理解的概念。您可以阅读有关闭包的更多信息

for (var i=0; i<response.data.length; i++){
      var attend= document.createElement("a");
      let name = response.data[i].name;
      attend.innerHTML="Add event";
      attend.addEventListener("click", function() {saveEvent(name);}, false);
      document.getElementsByClassName("event")[i].appendChild(attend);
}

for(var i=0;我非常感谢你,这肯定解决了我的问题!我没有太多时间来优化性能,但我会在完成后再看一看!