Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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_Loops - Fatal编程技术网

Javascript 在循环中传递参数onclick

Javascript 在循环中传递参数onclick,javascript,loops,Javascript,Loops,我正在循环中创建输入元素。 单击时,这些按钮应根据按钮元素的初始创建,使用特定参数调用特定函数。 事实上,所有按钮总是使用最后一个按钮的参数调用函数 for (var i = 0; i < planets.length; i++){ var id = planets[i].id; var input = document.createElement("input"); input.type = "button"; input.className = "worldButto

我正在循环中创建输入元素。 单击时,这些按钮应根据按钮元素的初始创建,使用特定参数调用特定函数。 事实上,所有按钮总是使用最后一个按钮的参数调用函数

for (var i = 0; i < planets.length; i++){
  var id = planets[i].id;

  var input = document.createElement("input");
  input.type = "button";
  input.className = "worldButton";
  input.value = "Choose this world";
  Input.onclick = function(){
     game.pickWorld(planets, id);
  }
}
for(var i=0;i
每个按钮似乎总是传递行星id[行星.长度],而不是
行星[i]
console.log(id)
正确。 使用
onclick
addEventListener
jquery都无所谓。单击

然而,整个行星阵列被成功地传递了

如何获得输入以正确传递特定迭代的id?

您需要使用

for (var i = 0; i < planets.length; i++){
  var id = planets[i].id;

  var input = document.createElement("input");
  input.type = "button";
  input.className = "worldButton";
  input.value = "Choose this world";
  
  input.onclick = (function(id, planets){
     return function(){
         game.pickWorld(planets, id);
     }
  })(id,planets);
}
for(var i=0;i
所发生的是变量
planets
id
对回调函数可见,并且在执行时使用了最后一个迭代值


但是,通过闭包,您有效地创建了一个“私有”变量,由每个回调函数查看和保存。

您需要在函数中传递
id
变量,如:

for (var i = 0; i < planets.length; i++){
  var id = planets[i].id;

  var input = document.createElement("input");
  input.type = "button";
  input.className = "worldButton";
  input.value = "Choose this world";
  Input.onclick = (function(pl, id){
     game.pickWorld(pl, id);
  })(planets, id);
}
for(var i=0;i
你可以在这本书里读到更多关于生活的内容