我想让单击以后让第五个以后的li全部显示.
但这涉及到闭包问题吗?
我对闭包不了解.
谁帮忙写一下并加上注释,谢谢了.
另外谁发一下闭包的相关知识
<!DOCTYPE HTML>
<html>
<head>
<title> New Document </title>
<style type="text/css">
*{ margin:0; padding:0;}
body {font-size:12px;text-align:center;}
a { color:#04D; text-decoration:none;}
a:hover { color:#F50; text-decoration:underline;}
.SubCategoryBox {width:600px; margin:0 auto; text-align:center;margin-top:40px;}
.SubCategoryBox ul { list-style:none;}
.SubCategoryBox ul li { display:block; float:left; width:200px; line-height:20px;}
.showmore { clear:both; text-align:center;padding-top:10px;}
.showmore a { display:block; width:120px; margin:0 auto; line-height:24px; border:1px solid #AAA;}
.showmore a span { padding-left:15px; background:url(images/down.gif) no-repeat 0 0;}
.promoted a { color:#F50;}
</style>
</head>
<body>
<div class="SubCategoryBox">
<ul id="list">
<li ><a href="#">佳能</a><i>(30440) </i></li>
<li ><a href="#">索尼</a><i>(27220) </i></li>
<li ><a href="#">三星</a><i>(20808) </i></li>
<li ><a href="#">尼康</a><i>(17821) </i></li>
<li ><a href="#">松下</a><i>(12289) </i></li>
<li ><a href="#">卡西欧</a><i>(8242) </i></li>
<li ><a href="#">富士</a><i>(14894) </i></li>
<li ><a href="#">柯达</a><i>(9520) </i></li>
<li ><a href="#">宾得</a><i>(2195) </i></li>
<li ><a href="#">理光</a><i>(4114) </i></li>
<li ><a href="#">奥林巴斯</a><i>(12205) </i></li>
<li ><a href="#">明基</a><i>(1466) </i></li>
<li ><a href="#">爱国者</a><i>(3091) </i></li>
<li ><a href="#">其它品牌相机</a><i>(7275) </i></li>
</ul>
<div class="showmore" id="showmore">
<a href="more.html"><span>显示全部品牌</span></a>
</div>
</div>
<script type="text/javascript">
var $ =function(id){return document.getElementById(id)};
var ul = $("list");
var li = ul.getElementsByTagName("li");
var link = $("showmore").getElementsByTagName("a")[0];
for(var i=0; i<li.length; i++){
if(i >5){
li[i].style.display ="none";
}
if(i == li.length-1){
li[i].style.display ="block";
}
link.onclick =function(){
if(i>5){
li[i].style.display ="block";
}
returnfalse;
}
}
</script>
</body>
</html>
这个不需要用闭包,就可以实现的啊,你现在的写法应该是会报错的,在页面加载的时候,就会执行你的javascript代码,在你的for循环里面,定义了局部变量i,并给link绑定了onlick事件(其实这个放到for循环外面就好了,只需要绑定一次就行),,所以在页面加载完以后,局部变量i会被销毁,再点击"显示全部品牌",i就找不到了。所以我的做法是在点击事件中加一个循环。
link.onclick =function(){
for (var j=0;j<li.length;j++){
if(j>5){
li[j].style.display ="block";
}
}
return false;
}
你要的效果就实现了,希望对你有帮助。
闭包的知识给你一个连接:http://www.cn-cuckoo.com/2007/08/01/understand-javascript-closures-72.html
所以在页面加载完以后,局部变量i会被销毁 //这个销毁是怎么理解啊?
@深蓝色梦想:
就是i的内存被回收了,i是局部变量,而你在前面定义的$,ul,li,link,这些是全局的变量,是定义在window对象里面的,所以存在。
@轻风拂夏: 回收了???还是不懂