for(var i= 0,len = oLis.length;i<len;i++){
oLis[i].index = i;
oLis[i].onclick = function() {
for(var n= 0;n<len;n++){
oLis[n].className = "";
oDivs[n].className = "hide";
}
oLis[i].className="on";
oDivs[i].className="";
// this.className = "on";
//oDivs[this.index].className = "";
}
for(var i= 0,len = oLis.length;i<len;i++) 分号写成逗号
oLis[i].className="on";
oDivs[i].className="";
给节点绑定事件执行的函数会执行上面那两句,那问题是执行时i是什么?很明显当你要执行代码时,for已经执行完(因为事件全部绑定),所以i恒定为oLis.length,所以oLis[i]和oDivs[i]是没有的,所以出错
this在这里是指触发函数的对象,比如<p onclick="fun()" id="na"></p> 假如p被点击,触发fun函数对象就是p,现在
this 等价于 document.getElementById("na")