javascript - 鼠标移上去没有成功添加"yellow"的className,为什么?
ringa_lee
ringa_lee 2017-04-11 11:54:50
[JavaScript讨论组]






  • 场记第1个banner主标题
  • 场记第2个banner主标题
  • 场记第3个banner主标题
  • 场记第4个banner主标题
  • 场记第5个banner主标题
  • 场记第6个banner主标题

ringa_lee
ringa_lee

ringa_lee

全部回复(4)
高洛峰
olis[i].onmouseover=function(){
    olis[i].className="yellow";
}

这个方法、内部的olis[i].className="yellow";改成this.className="yellow";

因为i在for循环完成之后已经变为最大值了、用户点击的时候i为循环的最大值、所以这个地方方法可以用this调用
PHP中文网

var 改为 let

for(let i=0;i<olis.length;i++){
  olis[i].className = i%2==0?"green":"skyblue";
    olis[i].onmouseover=function(){
    olis[i].className="yellow";
  }
}
ringa_lee

事件代理?

var ul = document.getElementsByTagName("ul");
var olis = ul[0].children;
ul[0].onmouseover = function(e){
    // console.log(e);
    e.target.className = "yellow";
}

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

    i%2==0?olis[i].className="green":olis[i].className="skyblue";

}
伊谢尔伦

这么说吧,这个问题在于两个点,一点是程序运行时变量的生命周期,一个是变量的作用域。

olis[i].onmouseover=function(){
   olis[i].className="yellow";
}

首先,两个 i 的运行时间不同。
第一个是网页程序在初始化的时候就运行的了,所以是 for循环每一步的对应值。
第二个i是你点击的时候才触发运行的,此时页面已经初始化完成,即上面的 for 循环已经结束,此时的 i 是for循环结束后的值;这时候对于元素数组 olis来说, i 已经越界。

其次就是JavaScript变量作用域的问题。

可以自己猜猜这段代码的结果是什么?


const COUNT = 8
var b = []

for (var i = 0; i < COUNT; i++) {
    b[i] = {
        addEventListener: function (callback) {
            this.click = callback
        },
        click: function () {}
    }
}

for (var i = 0; i < COUNT; i++) {
    var j = i
    b[j].addEventListener(function() {
        console.log(j)
    })
}

for (var k = 0; k < COUNT; k++) {
    b[k].click()
}
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号