javascript - 用for循环给几个元素绑定mouseove和mouseout事件,报错
PHP中文网
PHP中文网 2017-04-11 11:21:35
[JavaScript讨论组]

chrome浏览器报这样的错误:“Uncaught TypeError: Cannot read property 'style' of undefined”
如果在for循环外绑定就不会出错。
js代码:

window.onload = function(){
    var sideList = document.getElementById("side_tool").getElementsByTagName("li");
    var contentList = document.getElementById("side_content").getElementsByTagName("p");
    for (var i = 0; i < sideList.length; i++){
        sideList[i].onmouseover = function(){
        contentList[i].style.display = "block";
    }
        sideList[i].onmouseout = function(){
        contentList[i].style.display = "none";
    }
    }
}

html代码:


        

PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(4)
怪我咯

下标变了,找不到所以报错,
sideList[i].index=i;绑定下标
sideList[this.index];
contentList[this.index];对应的下标

黄舟

这里的绑定事件是异步执行的,因此当真正执行到

 contentList[i].style.display = "block";

的时候,已经超出了for的作用域,因此i的值根本就不能按照你的设想等同于当前循环的i
正确做法应该是

for (var i = 0; i < sideList.length; i++){
        sideList[i].onmouseover = function(){
        contentList[this.index].style.display = "block";
    }
伊谢尔伦

用 let 替换 var

PHP中文网

用自执行函数与闭包进行解决

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

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