Javascript 使用参数向多个元素添加onlick事件
我动态地创建一个元素表并将它们存储在一个数组中。下面的内容看起来像是一场噩梦,但这就是我决定对它进行分类的方式。现在我的问题是Javascript 使用参数向多个元素添加onlick事件,javascript,onclick,Javascript,Onclick,我动态地创建一个元素表并将它们存储在一个数组中。下面的内容看起来像是一场噩梦,但这就是我决定对它进行分类的方式。现在我的问题是addEventListener,我想在其中添加一个onclick事件,该事件连接到PlayMusic()。我尝试了一个简单的.onclick=并省略了函数(){},但是播放音乐()会立即执行。如果有函数(){},当我单击其中一个元素时,第一个参数(I)是“使用的最后一个数字”(即21个元素中的22个)。如何确保这些onclicks的参数中都有正确的索引 var thet
addEventListener
,我想在其中添加一个onclick
事件,该事件连接到PlayMusic()
。我尝试了一个简单的.onclick=
并省略了函数(){}
,但是播放音乐()
会立即执行。如果有函数(){}
,当我单击其中一个元素时,第一个参数(I
)是“使用的最后一个数字”(即21个元素中的22个)。如何确保这些onclick
s的参数中都有正确的索引
var thetable = document.getElementById("mustable");
for(var i=0; i<fullists.length-1; i++)
{
fullists[i][2] = [];
fullists[i][3] = [];
for(var j=0; j<fullists[i][1].length; j++)
{
var row = thetable.insertRow();
fullists[i][2][j] = row.insertCell();
fullists[i][2][j].className = "musentry";
var header = fullists[i][0].substring(0,fullists[i][0].lastIndexOf("."));
if(fullists[i][1][j][1] != undefined)
var title = fullists[i][1][j][1];
else
var title = fullists[i][1][j][0].substring(fullists[i][1][j][0].lastIndexOf("/"));
fullists[i][2][j].innerHTML = header + "<br /><b>" + title + "</b>";
fullists[i][2][j].addEventListener("click",function() { PlayMusic(i,j); },false);
fullists[i][3][j] = 0;
}
}
var thetable=document.getElementById(“mustable”);
对于(var i=0;i问题在于,在函数执行时,i
已具有不同的值,因为循环已继续执行。如果将循环更改为使用,则让i
而不是var i
(与j
相同)它会起作用,因为let
for
迭代器变量中的有一个循环,它实际上会在每次迭代时在循环内部创建变量的另一个副本,所以副本不会更改
另一种方法,基本上是相同的,但是是明确的:首先将它存储在另一个块作用域变量中。例如,const i2=i
,然后在函数(){}
中使用i2
。对于j
也是这样
或者,编写.addEventListener(…,PlayMusic.bind(null,i,j))
。使用bind
可以从一个函数中创建一个新函数,其中此
和参数已绑定到该函数。由于绑定立即发生,因此捕获了i
和j
的当前值,这也解决了该问题