Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 1.3.2和1.10.2之间的jQuery文档就绪执行订单差异_Javascript_Jquery - Fatal编程技术网

Javascript 1.3.2和1.10.2之间的jQuery文档就绪执行订单差异

Javascript 1.3.2和1.10.2之间的jQuery文档就绪执行订单差异,javascript,jquery,Javascript,Jquery,最近,我打算在现有网站中将jQuery库从1.3.2升级到1.10.2(该网站从2008年开始编写)。 但是由于遗留问题,下面的代码模式经常被使用,不可能重写或复查所有代码 function AgainAlert() { alert('again'); } function Test_init() { alert('before'); $(document).ready(AgainAlert); alert('after'); } $(document).re

最近,我打算在现有网站中将jQuery库从1.3.2升级到1.10.2(该网站从2008年开始编写)。 但是由于遗留问题,下面的代码模式经常被使用,不可能重写或复查所有代码

function AgainAlert() {
    alert('again');
}
function Test_init() {
    alert('before');
    $(document).ready(AgainAlert);

    alert('after');
}

$(document).ready(Test_init);
升级后,发现由于文件就绪的执行顺序存在计时问题。 使用jQuery 1.3.2执行上述代码的结果如下

  • 以前
  • 再次
  • 之后
  • 代码示例jQuery 1.3.2:

    而使用jQuery1.10.1的结果顺序是

  • 以前
  • 之后
  • 再次
  • 代码示例jQuery 1.10.1:

    有人知道这个问题吗(我必须保持上述代码模式)


    此外,还可能解决此问题或解决方法?

    最好的解决方法是改变

    $(document).ready(AgainAlert);
    

    因为第一个
    .ready
    已经向您保证DOM已加载,不需要另一个DOM


    另一种方法是修改
    .ready

    加入

    $.fn.ready = function(a){ a(); };
    
    通过
    Test\u init
    可以修复它

    通过更改
    $(document).ready(againarert)简单地
    againlert()
    工作得很好,它已经在
    $.ready()中,无需再次包装

    编辑:
    您可以做的是重写jQuery
    $.ready
    事件,这样它只会在第一次调用主体时等待主体准备就绪,其余的将只运行函数。

    这个行为很有趣,但您不应该真正调用
    ready
    两次。最好的解决方案是直接调用
    againlert
    。我刚意识到你的名字也是德里克。嗨,德里克朕會功夫. 是的,它不应该调用ready两次,但由于遗留问题,我别无选择。太多了:(我在想是否可以将jQuery 1.3.2中的一些代码移动到1.10.1,但是它们的结构差异太大,这是不可能的。因此,删除所有重复的
    。在我看来,ready
    是唯一的解决方案。看看我更新的答案。
    $.fn.ready = function(a){ a(); };
    
    function AgainAlert() {
        alert('again');
    }
    function Test_init() {
        alert('before');
        AgainAlert();
    
        alert('after');
    }
    
    $(document).ready(Test_init);