是否存在太多$(document).ready handlers(IE)这样的东西?

时间:2009-08-25 00:50:05

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

我的开发环境是基于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中工作正常(例如我们看到'真棒!!! ...')。此外,此代码用于在IE6 / 7中正常运行。为了使事情变得更加奇怪,其他 JS文件中的jQuery仍然无故障地执行。也许我有太多现成的处理程序? (我只有五个......?)

有什么想法?我已经和我斗争了几个小时,我不知道发生了什么。在此先感谢您的帮助!

更新 感谢Alconja(下图),我们确定问题是由于缺少了paren和分号。我在我的一小部分测试代码中修复了问题,并按预期执行了alert()。但是,当我回到我的完整代码库时,paren /分号对 存在。但是,考虑到我使用短测试工具所经历的(以及我在将我的全长代码修剪到测试工具时无意中引入的错误)​​,我知道问题是由于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的宽容引入了数组定义中的逗号(或者可能是参数/变量列表)总的来说......)

无论如何,这是固定的!所以,再次感谢大家! :)

2 个答案:

答案 0 :(得分:6)

如果这是您尝试运行的确切代码,那么您就错过了一个紧密的括号&分号...尝试:

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

答案 1 :(得分: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');

你可以看到它是完美的。

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