Javascript 嵌套的$(document).ready()和$(window).load()事件之间的差异
我知道这些州之间的基本区别,但在我们的一个项目中出现了一个奇怪的问题Javascript 嵌套的$(document).ready()和$(window).load()事件之间的差异,javascript,jquery,Javascript,Jquery,我知道这些州之间的基本区别,但在我们的一个项目中出现了一个奇怪的问题 jQuery(document).ready(function () { console.log('Dom is ready'); jQuery(document).ready(function () { console.log('Inner Dom ready'); }); }); 结果: Dom is ready Inner Dom ready Window Loaded 现在,无论何
jQuery(document).ready(function () {
console.log('Dom is ready');
jQuery(document).ready(function () {
console.log('Inner Dom ready');
});
});
结果:
Dom is ready
Inner Dom ready
Window Loaded
现在,无论何时,只要我调用document.ready()
,它都会执行其处理程序,这很好
但是如果你看这个
jQuery(window).load(function () {
console.log('Window Loaded');
jQuery(window).load(function () {
console.log('Inner window load');
});
});
结果:
Dom is ready
Inner Dom ready
Window Loaded
为什么内部窗口加载从未执行其处理程序,即使窗口已加载
感谢您的评论和回答,但我只是想知道它们在内部是如何工作的,我同意jQuery(window).load()事件只触发一次,因此没有机会执行任何其他加载事件处理程序,那么为什么这个规则不应用于jQuery(document).ready()。它是否设置了某种标志或什么,并在每次调用它时进行检查。$(document).ready()
在加载HTML文档和DOM就绪时执行。因此内部ready()
调用,因为DOM已经准备就绪ready()
只检查当前状态,不与以前的状态进行比较。这样的条件
if state=="ready" then invoke latest $(document).ready();
此条件适用于所有级别的ready()
方法
但是
$(window).load()在完全加载整个页面(包括所有帧、对象和图像)时执行。简单地说,load()
在状态从另一个状态更改为已加载状态时执行。当状态从另一个状态加载时,首先执行load()
,但未检测到内部load()
,并且状态发生变化,因此不会执行
if (is_state_changed=true AND current_state=="ready" AND current_state !== previous_state) then invoke latest $(window).load();
上述条件适用于第一个/外部load()
,但不适用于内部load()
,因为内部load()的状态没有改变(保持不变)
看看这个:你到底为什么要将它们嵌套?我想这是因为window.onload
只能调用一次,但是jQuery将函数封装在某个东西中,因此只能在窗口实际加载时调用它,而不是稍后,这就是内部调用不起作用的原因。而DOMContentLoaded
和jQuery的ready
将在任何时候被调用,只要文档已经加载。我已经在修改后的答案中解释了两者的逻辑