关于index索引的问题

kxteb0cc 2013-01-13 05:40:22
做的是一个弹出菜单,点击某一个li标签改变box的display,如果我给定一个序号这段JS就能正常执行,使用索引就会出问题,看了半天也没看出自己哪里写错了,跪求高人指点迷津!ps:话说这种写法貌似比较常用的是创建选项卡……
<script type="text/javascript">
window.onload=function ()
{
var oNav=document.getElementById('nav');
var aLi=oNav.getElementsByTagName('ul')[0].getElementsByTagName('li');
var aBox=getByClass(oNav,'box');
var i=0;

for (i=0; i<aLi.length; i++)
{
aLi[i].index=i
aLi[i].onclick=function ()
{
for (i=0; i<aLi.length; i++)
{
aBox[i].style.display='none'
}
aBox[this.index].style.display='block'
};
};
};
function getByClass(o,n)
{
var arr=[];
var s=o.getElementsByTagName('*');

for (var i=0; i<s.length; i++)
{
if (s[i].className==n)
{
arr.push(s[i]);
};
};
return arr;
};
</script>
...全文
137 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
tcpfeng 2013-01-14
  • 打赏
  • 举报
回复
aLi[i].index=i aBox[this.index].style.display='block' 索引有问题,index检索不对
xiaofan_sap 2013-01-14
  • 打赏
  • 举报
回复
你在 循环体力 alert 看看 变量 i到底是什么就可以了。参考闭包的概念:http://blog.csdn.net/xiaofan_sap/article/details/4676378
kxteb0cc 2013-01-14
  • 打赏
  • 举报
回复
引用 1 楼 xzy21com 的回复:
你的onclick函数应该使用闭包: aLi[i].onclick=function () { for (i=0; i<aLi.length; i++) { aBox[i].style.display='none' } ……
这是我之前写的一个选项卡,写法是一样的啊,咋这个就能执行呢?
// JavaScript Document
window.onload=function ()
{
	var oTab=document.getElementById('tab');
	var aLi=getByClass(oTab, 'menu')[0].getElementsByTagName('li');
	var aA=oTab.getElementsByTagName('ul')[0].getElementsByTagName('a')//获取a元素
	var aBox=getByClass(oTab, 'box');
	var i=0;
	
	aBox[0].style.display='block'
	
	for (i=0; i<aLi.length; i++)
	{
		aLi[i].index=i
		aLi[i].onclick=function ()
		{
			for (i=0; i<aLi.length; i++)
			{
				aLi[i].className=''
				aBox[i].style.display='none'
			};
			this.className='active'
			aBox[this.index].style.display='block'
		};
		aA[i].onfocus=function()//取消a标签链接获得焦点时的虚线框
		{
			this.blur();
		};
	};
};
function getByClass(o,n)
{
	var arr=[];
	var aAll=o.getElementsByTagName('*');//在参数o下获取所有标签元素
	for (var i=0; i<aAll.length; i++)
	{
		if (aAll[i].className==n)
		{
			arr.push(aAll[i]);
		};
	};
	return arr
};
ni_xiao_wei 2013-01-14
  • 打赏
  • 举报
回复
要用闭包 像楼主这样的话i的值一直就是aLi.length
scscms太阳光 2013-01-13
  • 打赏
  • 举报
回复
你的onclick函数应该使用闭包: aLi[i].onclick=function () { for (i=0; i<aLi.length; i++) { aBox[i].style.display='none' } aBox[this.index].style.display='block' }; 改为: aLi[i].onclick=(function (e){ return function(){ for (var i=0; i<aLi.length; i++){ aBox[i].style.display='none' } aBox[e].style.display='block'; } })(i);

87,907

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧