【问题标题】:Is there such a thing as too many $(document).ready handlers (IE)?是否有太多的 $(document).ready 处理程序 (IE)?
【发布时间】:2009-08-25 09:27:09
【问题描述】:

我的开发环境是基于 LAMP 的(Drupal);有几个 JS (jQuery) 文件可以提供各种功能。

直到最近,一切都还不错(好吧,IE6 很糟糕,但至少它有效)。然而,最近,我的一个 JS 文件在 IE6 和 IE7 中开始根本拒绝执行。

如果文件包含以下内容,我会收到两个警报,分别是“HELLO”和“GOODBYE”:

alert('HELLO');
alert('GOODBYE');

但是,当我添加就绪处理程序时,我得到的正是 警报:

alert('HELLO');
$(document).ready(function(){
alert('AWESOME!!!!!!!!!!!!');
}
alert('GOODBYE');

奇怪的是,我的代码在 Firefox 和 IE8 中运行良好(例如,我们看到 'AWESOME!!!...')。此外,这段代码曾经在 IE6/7 中运行良好。更奇怪的是,other JS 文件中的 jQuery 仍然可以顺利执行。也许我有太多准备好的处理程序? (我只有大约五个……?)

有什么想法吗?我已经为此奋斗了几个小时,我不知道发生了什么。提前感谢您的帮助!

更新 感谢 Alconja(如下),我们确定问题是由于缺少括号和分号。我在我的一小段测试代码中解决了这个问题,并按预期执行了 alert()s。然而,当我回到我的完整代码库时,括号/分号对 出现了。然而,考虑到我在短测试工具中的经历(以及我在将全长代码修剪为测试工具时无意中引入的错误)​​,我知道问题是由于 javascript 中的语法错误造成的。所以,我只是简单地浏览了文件,删除了越来越多的代码,直到出现 alert() 框。

正如预期的那样,(原始)问题是由于语法错误造成的。我的(不正确)代码是:

    $.post(
        '../ajax/changeUrl',
        {
            url: url,
        },
        function(responseText, textStatus, xhr) {
            // console.log(this);
            // console.log(responseText);
            // console.log(textStatus);
            // console.log(xhr);
        }
    );

如您所见,“url: url,”这一行多了一个逗号。一旦我删除了这个逗号,脚本就会正确执行。当然,Firefox 和其他浏览器并没有像 IE 那样糟糕,而且我知道我为什么插入这个错误 - 这是 PHP 对数组定义中逗号的宽容引入的一个坏习惯(或者可能是参数/变量列表一般情况下也是如此)...

无论如何,它已经修复了!所以,再次感谢大家! :)

【问题讨论】:

  • JavaScript 代码的另一个技巧是通过 JSLint 之类的东西运行它,以帮助发现潜在的语法问题。 (jslint.org)

标签: javascript jquery internet-explorer-6 internet-explorer-7


【解决方案1】:

如果这是您尝试运行的确切代码,则您缺少右括号和分号...尝试:

alert('HELLO');
$(document).ready(function(){
    alert('AWESOME!!!!!!!!!!!!');
});   //close the ready function call & statement
alert('GOODBYE');

【讨论】:

  • 非常感谢!当您盯着屏幕十个小时时,忽略这样简单的事情是多么容易令人惊讶......:)
  • @rinogo - 你使用任何版本控制吗?差异可能会阻止这种情况。
  • 具有大括号匹配的编辑器可能有助于突出该问题。此外,尽可能立即打开和关闭牙套。
【解决方案2】:

我知道这个问题已经得到解答,但我只是想分享一些建议。您可以通过在每个开括号处使用制表符来帮助避免此类问题。如果我们获取您的代码并使用标签:

alert('HELLO');
$(document).ready(
    function(){
        alert('AWESOME!!!!!!!!!!!!');
    }

    alert('GOODBYE');

您可以清楚地看到缺少的东西。

如果您选择发布的答案并使用标签:

alert('HELLO');
$(document).ready(
    function(){
        alert('AWESOME!!!!!!!!!!!!');
    }
);   //close the ready function call & statement

alert('GOODBYE');

你可以看到它是完美的。

适当的标签确实有助于避免这些问题:)

【讨论】:

  • 嗨丝滑!谢谢你的建议。在涉及空格和缩进时,我实际上非常挑剔 - 这只是我的问题的一个简单示例......我将在上面的评论中解释更多关于我的真正问题是什么......(再次感谢! :) )
猜你喜欢
  • 2019-11-04
  • 2010-10-20
  • 1970-01-01
  • 1970-01-01
  • 2014-04-20
  • 1970-01-01
  • 1970-01-01
  • 2011-12-30
  • 1970-01-01
相关资源
最近更新 更多