javascript - IE7 语法错误 if(...) 返回 false

标签 javascript internet-explorer-7

我们的一个广告商的目标网页包含以下 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/

相关文章:

javascript - 您应该如何从 Node 中的 EventEmitter 继承?

javascript - 尝试将 JQuery 与 CakePHP 1.3 一起使用时运气不佳

javascript - jquery 从动态创建的输入中获取文本

javascript - 新绑定(bind)后忽略 jscolor valueElement

asp.net - 以编程方式在ie7中打开一个新选项卡

internet-explorer - IE 7 渐变过滤器正在改变文本颜色

html - 如何在 IE7 中水平对齐按钮(不同形式)

javascript - 当对象具有 "Expected identifier"作为属性名称时,来自 IE8 和 IE7 的 "new"错误

检测 IE6 和 IE7 的 HTML 注释

javascript - Reactjs:仅在状态的某一部分发生更改后渲染完成后才执行脚本