[英]Setting onclick function to <li> element
I am trying to dynamically add onclick function to "li" tagged elements. 我试图动态添加onclick函数到“li”标记的元素。 But the event does not fires.
但事件并未触发。 Here is my code:
这是我的代码:
var arrSideNavButtons = [];
var sideNavLi = document.getElementsByClassName('side-nav')[0].getElementsByTagName('li');
var arrayOfSceneAudios = [scene1Audio, scene2Audio,...];
for (var i = 0; i < sideNavLi.length; i++) {
sideNavLi[i].onclick = function() {
arrayOfSceneAudios[i].play();
}
arrSideNavButtons.push(sideNavLi[i]);
}
Is it possible to code it this way? 是否有可能以这种方式编码? If yes, what is my mistake?
如果是的话,我的错误是什么? Thanks a lot.
非常感谢。
Wrap your onclick
handler in a closure, else it only get assigned to the last elem in the loop: 将
onclick
处理程序包装在一个闭包中,否则它只被分配给循环中的最后一个elem:
for (var i = 0; i < sideNavLi.length; i++) {
(function(i) {
sideNavLi[i].onclick = function() {
arrayOfSceneAudios[i].play();
}
arrSideNavButtons.push(sideNavLi[i]);
})(i)
}
I think it's better to reuse one single function, instead of creating a new one at each iteration: 我认为重用一个单独的函数更好,而不是在每次迭代时创建一个新函数:
var arrSideNavButtons = [],
sideNavLi = document.getElementsByClassName('side-nav')[0].getElementsByTagName('li'),
arrayOfSceneAudios = [scene1Audio, scene2Audio,...],
handler = function() {
this.sceneAudio.play();
};
for (var i = 0; i < sideNavLi.length; i++) {
sideNavLi[i].sceneAudio = arrayOfSceneAudios[i];
sideNavLi[i].onclick = handler;
arrSideNavButtons.push(sideNavLi[i]);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.