简体   繁体   English

将onclick功能设置为 <li> 元件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM