Javascript 1.3.2和1.10.2之间的jQuery文档就绪执行订单差异
最近,我打算在现有网站中将jQuery库从1.3.2升级到1.10.2(该网站从2008年开始编写)。 但是由于遗留问题,下面的代码模式经常被使用,不可能重写或复查所有代码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
function AgainAlert() {
alert('again');
}
function Test_init() {
alert('before');
$(document).ready(AgainAlert);
alert('after');
}
$(document).ready(Test_init);
升级后,发现由于文件就绪的执行顺序存在计时问题。
使用jQuery 1.3.2执行上述代码的结果如下
此外,还可能解决此问题或解决方法?最好的解决方法是改变
$(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);