本题我写的JS有两句报错,是为什么不能这样设置

来源:10-1 编程挑战

SamuleQiu

2016-05-05 19:23

    window.onload=function () {

        var oUl1=document.getElementById('ul1');

        var ali=oUl1.getElementsByTagName('li');   

        var odiv=document.getElementById("tab-list");

        var adiv=odiv.getElementsByTagName('div');

        


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

            ali[i].onmouseover=function(){this.className="active";adiv[i].className="";}//报错Uncaught TypeError: Cannot set property 'className' of undefined   为什么必须用先定义   ali[i].index=i;   再使用  adiv[this.index].className=""  才可以

            ali[i].onmouseout=function(){this.className="";adiv[i].className="hide"}//报错Uncaught TypeError: Cannot set property 'className' of undefined 

            

        }


    }


写回答 关注

3回答

  • 1VAN1
    2016-05-06 11:59:16

    报错原因:当触发onmouseover事件,执行adiv[i].className=""时,此时的i已经=ali.length+1了,所以系统找不到 adiv数组里面的 第 ali.length+1 个元素 来更换classname;

    为什么用adiv[this.index].className=""就可以,原因:adiv[this.index]是将当前元素 ali[i] 的索引值赋给adiv[],而这个索引值是根据ali[i]的位置决定的,所以不会出现像上面[i]的问题

    ^ ^我也是遇到了这个问题,然后自己去找答案,最后这么理解的,有错误欢迎大家指出来

  • qq_十万个为什么_2
    2016-05-06 11:19:52

    额,这里定义的ali[i].index=i,是为了给adiv确定“鼠标移动到ali[i]上全显示对应的adiv里的内容  ”的一个位置

  • qq_十万个为什么_2
    2016-05-06 11:14:20

    要先让电脑知道你的classname的位置,是属于哪一个lij里的classname,不写定义的话,程序查询不到classname在哪里,也就无法执行操作

JavaScript进阶篇

本课程从如何插入JS代码开始,带您进入网页动态交互世界

468061 学习 · 21891 问题

查看课程

相似问题