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
}
}
报错原因:当触发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]的问题
^ ^我也是遇到了这个问题,然后自己去找答案,最后这么理解的,有错误欢迎大家指出来
额,这里定义的ali[i].index=i,是为了给adiv确定“鼠标移动到ali[i]上全显示对应的adiv里的内容 ”的一个位置
要先让电脑知道你的classname的位置,是属于哪一个lij里的classname,不写定义的话,程序查询不到classname在哪里,也就无法执行操作