0

我们的一位广告客户的着陆页包含以下 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 错误。

4

2 回答 2

2

这似乎是 IE7 中的错误报告错误。当它报告错误时:

'document.getElementById(...)' is null or not an object

因为getElementById()在页面上没有找到ID,所以它还在前一行报告了一个无关的语法错误。

所以函数中存在错误,而不是该错误消息所抱怨的语法错误。MS 似乎已经修复了 IE8 中的这个错误报告错误——兼容模式甚至没有复制错误。

于 2013-01-03T18:45:21.537 回答
0

在我看来,您声明变量sfEls1两次。

于 2013-01-03T18:08:33.020 回答