在jquery中没有触发document.ready函数的事件

时间:2015-05-09 04:49:29

标签: jquery

我试图在jquery中触发一些事件。我的触发器功能在document.ready函数之外。它不起作用。如果我把代码放在document.ready函数中就可以了。

甚至触发了一些其他事件,即使它们不在document.ready函数中。

请让我清楚说明为什么某些事件只在document.ready函数内工作的功能。

由于

1 个答案:

答案 0 :(得分:0)

Web浏览器在遇到时立即执行所有JS,即使页面未完成加载也是如此。有效的是,你应该期望当你的JS执行时,部分或全部DOM仍然无法使用,因为它仍在从服务器下载。

将事件处理程序附加到元素只有在DOM中已存在这些元素时才有效,因此可以在您尝试附加它们时进行选择。有效的是,发出命令$('.some_element_not_yet_loaded').click(function(){alert('Element Clicked')})是无操作,因为选择器(.some_element_not_yet_loaded)不匹配任何内容。

确保在DOM中存在尝试附加处理程序的元素的唯一方法是等到document.ready事件被触发(此事件在DOM确实完成之前不会被触发加载并准备好了。)

您看到不一致行为的原因是因为这是一个经典的竞争条件 - 基于DOM从服务器加载的速度或速度有多快并且由浏览器初始化确定JS执行时存在哪些元素。在某种程度上,您可以通过将JS移动到页面底部来作弊,但因为DOM是从JS的执行异步初始化的,所以即使偶尔会导致问题。因此,最好将所有JS初始化代码放在document.ready事件中,以完全确保DOM已完全加载并准备就绪。