为什么我无论点击标题1和标题2都显示"我在测试!2";
然后改成 links[j].desc = setionId;
links[j].onclick = function(){
change(this.desc)
return false;
}
这样就正常了.谁讲解一下原因啊?
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title> New Document </title>
<style type="text/css">
.wrap{width:120px;border:1px solid orange}
*{padding:0;margin:0;}
ul{list-style:none}
ul ul{display:none}
#list .pore{position:relative;}
#list .pore ul{position:absolute;top:0;right:-122px;width:120px;border:1px solid green;overflow:hidden}
#list .pore ul li a{display:block;height:20px}
</style>
</head>
<body>
<ul id="list">
<li><a href="#one">标题1</a></li>
<li><a href="#two">标题2</a></li>
</ul> <div id="one">
<p>我在测试!1</p>
</div> <div id="two">
<p>我在测试!2</p>
</div>
<script type="text/javascript"> function changeElem(){
var list = document.getElementById("list");
var links = list.getElementsByTagName("a");
for(var j=0; j<links.length; j++){
var setionId = links[j].getAttribute("href").split("#")[1];
document.getElementById(setionId).style.display = "none";
links[j].onclick = function(){
change(setionId)
return false;
}
}
}
changeElem();
function change(id){
//alert(id)
var divs = document.getElementsByTagName("div");
for(var i=0; i<divs.length; i++){
if(divs[i].getAttribute("id") == id){
divs[i].style.display = "block";
}
else{
divs[i].style.display = "none";
}
}
}
</script>
</body>
</html>
然后改成 links[j].desc = setionId;
links[j].onclick = function(){
change(this.desc)
return false;
}
这样就正常了.谁讲解一下原因啊?
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title> New Document </title>
<style type="text/css">
.wrap{width:120px;border:1px solid orange}
*{padding:0;margin:0;}
ul{list-style:none}
ul ul{display:none}
#list .pore{position:relative;}
#list .pore ul{position:absolute;top:0;right:-122px;width:120px;border:1px solid green;overflow:hidden}
#list .pore ul li a{display:block;height:20px}
</style>
</head>
<body>
<ul id="list">
<li><a href="#one">标题1</a></li>
<li><a href="#two">标题2</a></li>
</ul> <div id="one">
<p>我在测试!1</p>
</div> <div id="two">
<p>我在测试!2</p>
</div>
<script type="text/javascript"> function changeElem(){
var list = document.getElementById("list");
var links = list.getElementsByTagName("a");
for(var j=0; j<links.length; j++){
var setionId = links[j].getAttribute("href").split("#")[1];
document.getElementById(setionId).style.display = "none";
links[j].onclick = function(){
change(setionId)
return false;
}
}
}
changeElem();
function change(id){
//alert(id)
var divs = document.getElementsByTagName("div");
for(var i=0; i<divs.length; i++){
if(divs[i].getAttribute("id") == id){
divs[i].style.display = "block";
}
else{
divs[i].style.display = "none";
}
}
}
</script>
</body>
</html>
解决方案 »
- 在火狐浏览器下怎么实现用JQuery打印 并且让其自动打印 不弹出打印机选择框 JavaScript也可以只要能实现就行 但是要在火狐浏览器中
- .html文件转换成.aspx文件图形无法显示
- 函数修改
- 一个小问题 本人新手 请高手指点 来着有分 在线等紧急
- 如何在文本框的 value 中运行 js 代码
- 如何实现这样的效果
- 例如有多个TR,如何再指定的TR下面再添加TR
- 可以通过样式表设置 滚动条 的颜色,那能不能设置 窗口的菜单栏,工具栏 的背景色?
- js+css问题请教
- 有没有把数字日期转化为大写汉字的现成JS函数?
- ext.panel的html属性问题
- (问题解决了,谁接个分结贴了)Jquery 二级导航 focusout ie和其他浏览器不同的 问题
var list = document.getElementById("list");
var links = list.getElementsByTagName("a");
for(var j=0; j<links.length; j++){
var setionId = links[j].getAttribute("href").split("#")[1];
document.getElementById(setionId).style.display = "none";
links[j].onclick = function(setionId){
return function()
{
change(setionId)
return false;
}
}(setionId)
}
}
changeElem();
function change(id){
//alert(id)
var divs = document.getElementsByTagName("div");
for(var i=0; i<divs.length; i++){
if(divs[i].getAttribute("id") == id){
divs[i].style.display = "block";
}
else{
divs[i].style.display = "none";
}
}
}为html元素绑定事件处理函数, 然而那个事件处理函数是有触发条件的时候才执行,就像单击按扭。
也就是说你的函数执行的时候,那个循环早就结束,你那个setionid就是循环结束的时候的那值,所以自然就只有一种结果了
links[j].onclick = (function(sid){
return function(){
change(sid);
return false;
};
})(setionId);
for(var j=0; j<links.length; j++){
(function(j){ // 用闭包把循环体内容包围起来即可
var setionId = links[j].getAttribute("href").split("#")[1];
document.getElementById(setionId).style.display = "none";
links[j].onclick = function(){
change(setionId)
return false;
}
}(j)) // 闭包结束
}
看看这个吧
for循环作用域问题