Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/375.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-getElementByName和i值_Javascript_Html - Fatal编程技术网

Javascript FOR-getElementByName和i值

Javascript FOR-getElementByName和i值,javascript,html,Javascript,Html,我的代码如下: for(var i =0; i < document.getElementById('test').getElementsByTagName("li").length; i++){ document.getElementById('test').getElementsByTagName("li")[i].onmouseover= function(){ alert(document.getE

我的代码如下:

for(var i =0; i < document.getElementById('test').getElementsByTagName("li").length; i++){                                  
    document.getElementById('test').getElementsByTagName("li")[i].onmouseover= function(){
    alert(document.getElementById('test').getElementsByTagName("li")[i].innerHTML);
    }
}
for(var i=0;i
HTML:


  • 测试
  • 测试2
  • 测试3
  • 测试4
JSfiddle:


“i”总是被分配最后一个值,然后不起作用。如何解决

看起来您想要的是
querySelectorAll

var elems = document.querySelectorAll("#test ul li");
for (var i = 0; i < elems.length; i++) {
    elems[i].onmouseover = function() {
        console.log("See?");
    }
}

演示:

问题在于范围界定。如果在循环内创建函数,则循环变量将始终具有其最后一个循环值。基本上,循环是执行的,但是函数声明中的变量在函数被调用之前不会被计算,此时“i”等于最后一个值。可以使用闭包使变量立即解析

for(var i =0; i < document.getElementById('test').getElementsByTagName("li").length; i++){
    (function(i) {                                  
        document.getElementById('test').getElementsByTagName("li")[i].onmouseover= function(){
            alert(document.getElementById('test').getElementsByTagName("li")[i].innerHTML);
        };
    })(i);
}
for(var i=0;i
我也同意tymeJV的观点,您应该首先存储元素,而不是重新选择它们。

您需要缓存I

    for(var i =0; i < document.getElementById('test').getElementsByTagName("li").length; i++)
    {   
       var _i = i;                            
        document.getElementById('test').getElementsByTagName("li")[i].onmouseover= function()
        {

        alert(document.getElementById('test').getElementsByTagName("li")[_i].innerHTML);
        }
    }
for(var i=0;i
//甚至更好

var elements = document.getElementById('test').getElementsByTagName("li");
for(var i =0; i < elements.length; i++)
{                                  
    elements[i].addEventListener('mouseover', function()
    {
    alert(this.innerHTML);
    });
}
var elements=document.getElementById('test').getElementsByTagName(“li”);
对于(var i=0;i
以下是一个非常简洁的解决方案,可在Firefox和IE9内部的JSFIDLE中使用:

var elems = document.getElementById("test").getElementsByTagName("li");
for(var i =0; i < elems.length; i++){
    elems[i].onmouseover= function(e){
       console.log(this.innerHTML);
       console.log(e);
    }
}
var elems=document.getElementById(“test”).getElementsByTagName(“li”);
对于(变量i=0;i


由于不知道您打算在mouseover事件中做什么,我建议您传入该事件,以便您可以将其引用为“e”。

如果您真的想使用javascript而不是JQuery,您应该这样做

var ul = document.getElementById("test");
var li = ul.getElementsByTagName("li");

for(var i =0; i <li.length; i++){                                   
    li[i].onmouseover= function(){
        alert(this.innerHTML);
    }
}
var ul=document.getElementById(“测试”);
var li=ul.getElementsByTagName(“li”);

for(var i=0;i某个地方有只小猫在哭。不清楚你在问什么…第一个技巧不起作用;函数中的局部变量仍在访问共享的“i”从封闭范围。你是对的。我应该将var_I=I;放在事件侦听器之外。好吧,检查其他答案中的闭包代码-JavaScript范围与其他语言中的范围不一样。抱歉,我赶时间。闭包会导致函数立即执行,因此它需要在赋值之外,否则,alert立即开火。
var elems = document.getElementById("test").getElementsByTagName("li");
for(var i =0; i < elems.length; i++){
    elems[i].onmouseover= function(e){
       console.log(this.innerHTML);
       console.log(e);
    }
}
var ul = document.getElementById("test");
var li = ul.getElementsByTagName("li");

for(var i =0; i <li.length; i++){                                   
    li[i].onmouseover= function(){
        alert(this.innerHTML);
    }
}