<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
*{margin: 0;padding: 0;font-size:14px;}
ul{list-style: none;}
li{ float: left;margin:10px 15px 0 20px ;text-align: center;border: 1px solid #CCC;padding: 3px 5px;}
p{width: 250px;clear: both;margin-left:20px; border: 2px solid #ccc;display: none;}
.active{border-top-color: red}
.
</style>
<script>
window.onload=function(){
var li=document.getElementsByTagName('li');
var op=document.getElementsByTagName('p');
for(var i=0;i<li.length;i++){
li[i].onclick=function(){
for(var j=0;j<op.length;j++){
li[i].className='';
//为什么这里的i会报错未定义,在这个onclick事件中应该能访问到函数之外的变量呀。
op[j].style.display='none';
}
this.className='active';
op[j].style.display='block'
//这里的j也是一样的情况。
}
}
}
</script>
</head>
<body>
<ul>
<li class="active">房产</li>
<li>家居</li>
<li>二手房</li>
</ul>
<p class="active" style="display: block;">
1
</p>
<p>2</p>
<p>3</p>
</body>
</html>
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
因为你给li循环添加onclick事件之后,变量i的值已经是3了,所以li[3]是未定义的,你可以用一个闭包解决问题,或者给每个li添加个index索引值,一种方案如下
将
script标签里面的代码改成下面就好了,这是JS闭包的问题,可以参考我之前写的博客