有点绕不出来了 解答
window.onload = function () { var oli = document.getElementsByTagName("li"); var odiv = document.getElementsByTagName("div"); for(var i=0;i<oli.length;i++) { oli[i].index = i; oli[i].onclick = function() { for(var j=0;j<oli.length;j++) { oli[j].className = ""; odiv[j].className = "hidden"; } this.className = "on"; odiv[this.index].className = ""; } } }
odiv[this.index].className = "";
写成 odiv[i].className = ""; 就提示找不到这个odiv[i],不是仍然是在FOR循环里面吗
涉及闭包,楼主慢慢来初学者都会碰到这那的问题,要有耐心。
for(var i=0;i<oli.length;i++){
oli[i].index=i;//给每个li增加一个下标属性,使用这个方法,那么接下来的闭包可以值接使用下标找目标。
......
}下面接着写了一个闭包
oli[i].onclick=function(){
......
odiv[this.index].className()//这里this.index是直接使用上面的下标方属性。
}
如果使用odiv[i]那么此时的i不是012345....下标,而是这样一段代码了,你可以alert(i)就知了。
window.onload = function() { var a=document.getElementById("ul1"); var b=a.getElementsByTagName("li"); var c=document.getElementById("div1"); var d=c.getElementsByTagName("div"); for(var i=0;i<b.length;i++){ b[i].index=i; b[i].onmouseover = function() { for(var i = 0; i < b.length; i++) { b[i].className = ""; d[i].className="hide"; } this.className="active"; d[this.index].className=""; } }
我虽然做出了效果,可我也不是很清楚这个代码。。。你对比着看吧。把j换成i
感觉是变量作用域的问题