我的吉普车有一个基于浏览器的服务手册。适用于IE但不适用于Firefox。基本上有一个TOC可以扩展并深入研究子主题,例如
但点击主题旁边的[+]时,Firefox会抛出以下错误:
TypeError: all[i] is undefined
itcToc.js line 10
if( "UL" == all[ i ].tagName )
以下是itcToc.js中的代码:
var eCurrentUL, eCurrentLI, eUL, tempIndex, syncIndex = null;
var eTagName, eSrc, eImgIndex, eSynchedNode = null;
var tempImgIndex = '0';
function getNextULNS(eSrc)
{
var all = document.getElementsByTagName("*");
for(var i = tempIndex; i < all.length; i++)
{
if( "UL" == all[ i ].tagName )
{
eImgIndex = all[tempIndex - 2];
return all[ i ];
}
else if( "LI" == all[ i ].tagName )
{
break;
}
}
return false;
}
我是一名技师,所以我尽力排除故障。如果我用第10行的整数替换i,它将超过这个并且在第15行的下一个if语句上出错,它具有类似的语法。
这是一个可变范围问题吗?看起来像Firefox在if语句中不喜欢var i,尽管在for语句中定义了。
答案 0 :(得分:1)
如果您希望tempIndex
在第一次迭代中工作,则必须将undefined
设置为有效数字而不是all[ i ]
。
例如
var tempIndex = 0;
与JS房间的朋友一起,我们在IE版本7到10上测试了[0,1][undefined]
,它总是给我们undefined
。因此,无论是在较旧的浏览器上进行测试,还是在问题中都缺少某些内容。
答案 1 :(得分:0)
tempIndex
未在for循环开始时初始化,导致i
也为undefined
。
答案 2 :(得分:0)
var i = tempIndex
:tempIndex尚未在任何地方定义。除非你的意思是tempImgIndex
,否则你的变量名称就错了。如果它的意思是tempImgIndex则需要var tempImgIndex = 0
而不是var tempImgIndex = '0'
。