<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>

解决方案 »

  1.   

    我原来的代码写错了,
    不是要用getElementsByTagName("div")[i],二十只要用getElementsByTagName("div")[0],即第一个元素就可以了var i = 0; 
    arr[i].onmouseover = function() { 
    arr[i].getElementsByTagName("div")[0].style.left = 100; 
    arr[i].getElementsByTagName("div")[0].style.top = 20; 
    arr[i].getElementsByTagName("div")[0].style.display = "block"; 

    arr[i].onmouseout = function() { 
    arr[i].getElementsByTagName("div")[0].style.display = "none"; 
    }
    有效果,下面放到循环里面就没有效果了
    for(var i=0; i<arr.length; i++) {
    arr[i].onmouseover = function() { 
    arr[i].getElementsByTagName("div")[0].style.left = 100; 
    arr[i].getElementsByTagName("div")[0].style.top = 20; 
    arr[i].getElementsByTagName("div")[0].style.display = "block"; 

    arr[i].onmouseout = function() { 
    arr[i].getElementsByTagName("div")[0].style.display = "none"; 
    }
    }
      

  2.   

    to muxrwc(王辰) 
    只是纠正以下我自己发帖时候的错误啊,没有说不搭理你啊……我只是想明白,为什么手工指定i的值的时候就有效,用循环指定i的值的时候,就无效……你的方法我在试,不管试出来效果对不对,我这个问题到底是什么原因引起的呢?
      

  3.   

    因为你用的是
    for(var i=0; i<arr.length; i++) {
    arr[i].onmouseover = function() { 
    arr[i].getElementsByTagName("div")[0].style.left = 100; 
    arr[i].getElementsByTagName("div")[0].style.top = 20; 
    arr[i].getElementsByTagName("div")[0].style.display = "block"; 

    arr[i].onmouseout = function() { 
    arr[i].getElementsByTagName("div")[0].style.display = "none"; 
    }
    }
    这个for的i
    循环到最后一次的时候i 就 == arr.length
    所以..你的那些FUNC找i就会出错..
    我那样写..是用一个func保了i...
      

  4.   

    判断的时候是i<arr.length啊,最后一次,怎么会i==arr.length呢?而且,我即使把判断循环的条件写成i<(arr.length-1)也出现同样的问题啊……
      

  5.   

    arr[i].onmouseover = function() {
    //这里面的arr[i]应全部换成this
    }
    arr[i].onmouseout = function() {
    //同上
    }
      

  6.   

    to muxrwc(王辰)
    您的方法有用,只要根据我的实际情况稍微调整下位置就可以了,但是我还是不明白其中的原理……能告诉我么?是在是非常感谢……
      

  7.   

    xuStanly(黑金)
    您的方法也可以,这个里面到底是什么一个原因呢?
      

  8.   

    to muxrwc(王辰)
    加了你QQ了,加我,谢谢
      

  9.   

    也就是说...
    return 函数后.
    那些每次执行那些func都没有释放资源...
    并且..返回的func中..的i引用了..执行时的func里的形式参数i
    这样每执行一次就会发生一次新的引用...
    所以说就不会发生引用外部的那个i...
      

  10.   

    boss说..上班不允许上Q...
    有机会上了加你..^o^
      

  11.   

    谢谢,结贴,xuStanly(黑金)的方法也有用
      

  12.   

    循环引用时做为循环指针的变量被误改写的问题。
    js这一类的脚本语言变量的作用域经常让初学者犯晕,
    所以,建议在写稍复杂的js代码的时候,循环的指针不要用i,n,m等过于简单的字母。
    避免当函数之间互相调用时,两个函数中因同时存在以i,n,m等命名的指针变量的循环而出现错误。
      

  13.   

    muxrwc(王辰)
    xuStanly(黑金)
    真的非常感谢你们了,
    拜你们为师了,黑金大哥,也能给个QQ什么的么?谢谢了
      

  14.   

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

    把这个放在上边
    arr还没有值呢
    所以arr.length过不去。