我们的一个广告商的目标网页包含以下 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(. ..) 为 null 或不是对象
。我已要求我们的营销人员让广告客户了解这个问题。
那么这个逻辑错误是否会导致 IE7 认为前一行存在语法错误?我向页面添加了一个 catmenu
元素,语法错误也消失了。
然后我添加了该函数的其余部分。第二个 sfEls1 赋值还引用了不存在的 ID。这导致它将前面的 }
行报告为语法错误!我认为这证实了这是一个奇怪的 IE7 错误。
最佳答案
这似乎是 IE7 中的错误报告错误。当它报告错误时:
'document.getElementById(...)' is null or not an object
由于 getElementById()
在页面上找不到 ID,因此它还会在此行之前报告无关的语法错误。
所以函数中存在错误,但不是此错误消息所提示的语法错误。 MS 似乎已经修复了 IE8 中的此错误报告错误 - 兼容模式甚至无法复制该错误。
关于javascript - IE7 语法错误 if(...) 返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14144456/