12

我在 IE 9 中遇到了 JavaScript 范围的真正问题。

这是在我的文档正文中(是的,我意识到脚本应该放在头部以获得正确的 HTML,但我以前从未让它破坏过脚本)。该脚本在正文中,因为我不想弄乱仅与此页面相关的脚本的共享标题页面:

<script type="text/javascript">
function googleMapsQuery(accountNum) {
    // function code is here (omitted for brevity)
}
</script>

这是在td块内的tr块内的块内的块内的tbody块内的table块内的form块内body

<button id="google-422111" onclick="googleMapsQuery(422111)" type="button">Google This!</button>

我什至将脚本块移到表单上方,以防脚本函数声明的顺序相关(不是)。

该脚本在 FireFox 和 Chrome 中完美运行,但在 IE 9(打开或不打开兼容性视图)中,我收到此错误:

SCRIPT5007:属性“googleMapsQuery”的值为 null 或未定义,而不是函数对象

我研究了 JavaScript 范围,但我无法弄清楚为什么 IE 认为 'googleMapsQuery' 是一个属性,以及为什么它是未定义的。这是一个函数,我定义了它!

4

6 回答 6

23

我在属性为空或未定义时遇到了类似的问题。

这最终是 IE 的文档模式被默认为 IE7 标准。这是因为兼容模式被自动设置为用于所有 Intranet 站点(工具>兼容性视图设置>在兼容性视图中显示 Intranet 站点)。

于 2013-07-15T11:28:13.457 回答
12

我找到了答案,尽管我报告了什么,但它不是特定于浏览器的。该错误出现在我的函数代码中,并且会发生在任何浏览器中。归结为这一点。我的代码中有两行是特定于 FireFox/FireBug 的。他们使用了console.log。在 IE 中,他们抛出了一个错误,所以我将它们注释掉(或者我是这么认为的)。我做了一个糟糕的工作来评论它们,并打破了我的功能中的括号。

原始代码(其中包含console.log):

if (sxti.length <= 50) console.log('sxti=' + sxti);
if (sxph.length <= 50) console.log('sxph=' + sxph);

损坏的代码(注释内的括号错位):

if (sxti.length <= 50) { //console.log('sxti=' + sxti); }
if (sxph.length <= 50) { //console.log('sxph=' + sxph); }

固定代码(注释外的固定括号):

if (sxti.length <= 50) { }//console.log('sxti=' + sxti);
if (sxph.length <= 50) { }//console.log('sxph=' + sxph);

所以,这是我自己草率的编码。该函数确实没有定义,因为语法错误使其无法关闭。

哦,生活和学习。;)

于 2012-04-13T19:43:16.607 回答
2

您是否尝试将分号添加到onclick="googleMapsQuery(422111);". 我没有足够的代码来测试缺少的分号是否会导致错误,但 ie 对语法更挑剔。

于 2012-04-12T18:06:29.680 回答
2

在我的特殊情况下,我在组织中使用的旧网站上遇到了类似的错误。为了解决这个问题,我不得不将该网站列为“受信任的网站”。

为此:

  • 单击工具按钮,然后单击 Internet 选项。
  • 转到安全选项卡。
  • 单击受信任的站点,然后单击站点按钮。
  • 输入网站的 url,然后单击Add

我把这个放在远程情况下,它会帮助别人。

于 2018-08-30T12:36:02.963 回答
1

所以我遇到了类似的情况,也有同样的错误。我忘了我在我的开发机器上更改了兼容模式,并且我的 javascript 中也有一个 console.log 命令。我在 IE 中更改了兼容模式,并删除了 console.log 命令。没有更多的问题。

于 2015-07-09T20:00:13.637 回答
-1

就在几分钟前,我遇到了同样的问题。我遇到的问题是在放置您的 jQuery 后启动其他 jQuery 脚本。毕竟它会正常工作。

于 2013-06-19T07:47:18.363 回答