日期:2014-05-16  浏览次数:20453 次

javascript 循环内不认对象
以下两段代码:

var   i   =   0;  
arr[i].onmouseover   =   function()   {  
    arr[i].getElementsByTagName( "div ")[i].style.left   =   100;  
    arr[i].getElementsByTagName( "div ")[i].style.top   =   20;  
    arr[i].getElementsByTagName( "div ")[i].style.display   =   "block ";  
}  
    arr[i].onmouseout   =   function()   {  
    arr[i].getElementsByTagName( "div ")[i].style.display   =   "none ";  
}  

以上代码完全正常,可以达到效果,但是,把i编程循环中的变量后,即把i=0变成循环中的:


for(var   i   =   0;   i <arr.length;   i++)   {  
    //这里放上面那段去掉第一行var   i   =   0;的全部代码  
}  

浏览器报错,arr[...]为空或不是对象。  
arr.length能够输出具体数值4循环也能输出i=0,1,2,3  
什么倒头问题啊!

------解决方案--------------------
<script type= "text/javascript ">
var rover = function (i) {
return function () {
arr[i].getElementsByTagName( "div ")[i].style.left = 100;
arr[i].getElementsByTagName( "div ")[i].style.top = 20;
arr[i].getElementsByTagName( "div ")[i].style.display = "block ";
};
};
var rout = function (i) {
return function () {
arr[i].getElementsByTagName( "div ")[i].style.display = "none ";
};
};

arr[i].onmouseover = rover(i);
arr[i].onmouseout = rout(i);
</script>
------解决方案--------------------
循环引用时做为循环指针的变量被误改写的问题。
js这一类的脚本语言变量的作用域经常让初学者犯晕,
所以,建议在写稍复杂的js代码的时候,循环的指针不要用i,n,m等过于简单的字母。
避免当函数之间互相调用时,两个函数中因同时存在以i,n,m等命名的指针变量的循环而出现错误。