jQuery文档就绪执行顺序在1.3.2和1.10.2之间存在差异

时间:2014-01-08 09:46:53

标签: javascript jquery

最近,我将在现有网站(该网站自2008年起编写)中将jQuery库从1.3.2升级到1.10.2。 但由于遗留问题,以下代码模式经常使用,无法重写或审核所有代码模式。

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

    alert('after');
}

$(document).ready(Test_init);

升级后,发现由于文件准备就绪的执行顺序存在时间问题。 使用jQuery 1.3.2的上述代码的执行结果是

  1. 再次
  2. 之后
  3. 代码示例jQuery 1.3.2: http://jsfiddle.net/w4T7b/

    使用jQuery 1.10.1的结果顺序是

    1. 之后
    2. 再次
    3. 代码示例jQuery 1.10.1: http://jsfiddle.net/FGt54/

      有没有人知道这个问题? (我必须保持上面的代码模式)

      此外,可以解决此问题或解决方法吗?

2 个答案:

答案 0 :(得分:2)

function AgainAlert() {
    alert('again');
}
function Test_init() {
    alert('before');
    AgainAlert();

    alert('after');
}

$(document).ready(Test_init);

$(document).ready(AgainAlert);更改为简单AgainAlert();效果很好,它已经在$.ready()内,无需再次换行。

FIDDLE

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

答案 1 :(得分:1)

最佳解决方案是改变

$(document).ready(AgainAlert);

AgainAlert();

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

<小时/> 另一种解决方法是修改.ready

添加

$.fn.ready = function(a){ a(); };

Test_init会修复它。

http://jsfiddle.net/DerekL/FGt54/3/