请问以下代码中,为什么我把循环当中的this改为as[i]就没有效果了啊,按理说应该是一样的道理啊

来源:5-1 编程挑战

糖果罐

2015-12-27 14:38

// 滑过滑过、离开、点击每个选项时

      // 执行脚本

    for(var i=0;i<as.length;i++){

        as[i].onmouseover=function(){

            this.style.background='#456';

        }

        as[i].onmouseout=function(){

            this.style.background='#fff';

        }

        

    }


写回答 关注

3回答

  • 李晓健
    2015-12-27 14:47:09
    已采纳

    你把代码改成这样

    as[i].onmouseover=function(){
        this.style.background='#456';
        alert(i);
    }

    看看弹出的i是不是循环里一直增长的值就知道为什么了,如果非要用as[i],可以试下这么写

    (function(i){
        as[i].onmouseover=function(){
            as[i].style.background='#456';
        }
    }(i));


    糖果罐

    非常感谢!

    2015-12-31 12:31:31

    共 6 条回复 >

  • q有天堂
    2015-12-29 13:04:07

    是这样的,你只是使用循环对a这个序列添加事件,所以当你点击的时候a的任意一个元素的时候,每个元素的事件早就添加完了。也就是说这时候的事件处理函数中的i等于序列的长度-1,而不会等于你点击那个元素在序列中的索引号。

  • 狂飙的蜗牛_1
    2015-12-27 15:08:09

    你百度下“闭包问题”就明白了

    糖果罐

    好,我去查查

    2015-12-27 16:25:02

    共 1 条回复 >

DOM事件探秘

DOM事件?本课程会通过实例来给小伙伴们讲解如何使用这些事件

99536 学习 · 1197 问题

查看课程

相似问题