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 从for-in循环调用递增器_Javascript_Loops_Increment_Getelementsbytagname - Fatal编程技术网

Javascript 从for-in循环调用递增器

Javascript 从for-in循环调用递增器,javascript,loops,increment,getelementsbytagname,Javascript,Loops,Increment,Getelementsbytagname,在这个循环中,为了识别当前元素,调用递增器I有点困难。Firebug向我提供了错误“li[i]。addEventListener不是函数” 奇怪的是如果我打电话 alert(li[i].getAttribute('id') 我得到了提醒我的id,但是如果我使用 var id=li[i].getAttribute('id'); document.getElementById(id).addEventListener(blah); 我得到同样的“不是函数”错误。这是一个for-in-loop的东

在这个循环中,为了识别当前元素,调用递增器I有点困难。Firebug向我提供了错误
“li[i]。addEventListener不是函数”

奇怪的是如果我打电话

alert(li[i].getAttribute('id')
我得到了提醒我的id,但是如果我使用

var id=li[i].getAttribute('id');
document.getElementById(id).addEventListener(blah);
我得到同样的“不是函数”错误。这是一个for-in-loop的东西吗?我注意到,
alert(I)
在循环结束时调用了一些额外的东西,那么在for-in循环中使用递增器有不同的方法吗?顺便说一下,我使用的列表如下:

<ul>
    <li id=pomp>
        stuff
    </li>
    <li id=and>
        and
    </li>
    <li id=circumstance>
        things
    </li>
</ul>
  • 东西
  • 东西

这就是为什么您必须避免使用
for in
循环

for(var i=0;i<li.length;i++){
    li[i].addEventListener('click', function(){
        alert('yey');
    });
}
for(var i=0;i这样试试

for(var i in li){
    i.addEventListener('click', function(){
        alert('yey');
    });
    }
});

正如@lbu所指出的,您应该使用
for(decl;test;inc)
遍历数组

不过,这也是使用委派的好地方,因为每个
  • 都必须是
    的直接后代,因此您可以将事件处理程序放在那里,并减少浏览器的工作量:

    var ul = document.getElementsByTagName('ul');
    
    for (var i = 0, n = ul.length; i < n; ++i) {
        ul[i].addEventListener('click', function(ev) {
            alert(ev.target.id);
        });
    }
    
    var ul=document.getElementsByTagName('ul');
    对于(变量i=0,n=ul.length;i

    如果它像那样工作,那将非常酷,但不幸的是,这不起作用。
    var ul = document.getElementsByTagName('ul');
    
    for (var i = 0, n = ul.length; i < n; ++i) {
        ul[i].addEventListener('click', function(ev) {
            alert(ev.target.id);
        });
    }