将onclick功能设置为<li>元素</li>

时间:2013-11-30 00:58:44

标签: javascript html

我正在尝试动态添加onclick函数到“li”标记的元素。 但事件并未触发。 这是我的代码:

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]);
}

可以这样编码吗? 如果是的话,我的错误是什么? 非常感谢。

2 个答案:

答案 0 :(得分:2)

onclick处理程序包装在一个闭包中,否则它只被分配给循环中的最后一个elem:

for (var i = 0; i < sideNavLi.length; i++) {
    (function(i) {
        sideNavLi[i].onclick = function() {
            arrayOfSceneAudios[i].play();
        }
        arrSideNavButtons.push(sideNavLi[i]);
    })(i)
}

答案 1 :(得分:0)

我认为重用一个单独的函数更好,而不是在每次迭代时创建一个新函数:

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]);
}