我们的一位广告客户的着陆页包含以下 Javascript 函数:
sfHover = function() {
if (!document.getElementsByTagName) return false;
var sfEls1 = document.getElementById("catmenu").getElementsByTagName("li");
for (var i=0; i<sfEls1.length; i++) {
sfEls1[i].onmouseover=function() {
this.className+=" sfhover1";
}
sfEls1[i].onmouseout=function() {
this.className=this.className.replace(new RegExp(" sfhover1\\b"), "");
}
}
var sfEls1 = document.getElementById("menu").getElementsByTagName("li");
for (var i=0; i<sfEls1.length; i++) {
sfEls1[i].onmouseover=function() {
this.className+=" sfhover";
}
sfEls1[i].onmouseout=function() {
this.className=this.className.replace(new RegExp(" sfhover\\b"), "");
}
}
}
在IE7中进入页面时,就if
行报语法错误。据我所知,这是非常好的语法。IE8 不抱怨,Chrome 也不抱怨。我能看到的唯一潜在问题是该return false;
语句不在大括号中,但它们是可选的;我尝试添加它们,但没有解决错误。
这是IE7中的错误吗?
更新:
我从页面中删除了除此函数定义之外的所有内容,以确保它与它加载的许多其他脚本之一无关。错误仍然发生。
我删除了除该if
行之外的所有内容,错误消失了。我添加了下一行,错误返回。有趣的是第二行得到了一个预期的错误:页面上没有catmenu
元素(甚至在我删除所有 HTML 之前),所以它正确地抱怨document.getElementById(...) is null or not an object
. 我已经要求我们的营销人员让广告商知道这个问题。
那么这个逻辑错误是否会导致 IE7 认为前一行存在语法错误?我catmenu
在页面中添加了一个元素,语法错误也消失了。
然后我添加了其余的功能。第二个sfEls1
分配也引用了一个不存在的 ID。这导致它将前}
一行报告为语法错误!我认为这证实了这是一个奇怪的 IE7 错误。