用什么代替$(document).ready();?

时间:2011-06-18 10:55:49

标签: javascript html

所以我正在使用jquery以及我写的一些插件。

我在$(document).ready(function(){})块中进行所有初始化,但是当整个DOM已加载并准备好使用时执行。

然而,这需要很长时间,例如。当有服务器负载时。或者也许用户点击已经加载的按钮而页面的其余部分尚未加载(因此还没有执行document.ready()),在这种情况下它什么也不做。

那么,如果我想在加载页面的相关部分之后立即执行代码而不是等待加载WHOLE页面,该怎么办?

我知道在这个js操作的html之后立即放置内联代码就可以解决这个问题,但如果那个代码使用了尚未加载的jQuery这样的库呢?

4 个答案:

答案 0 :(得分:0)

仍然可以在没有JavaScript的情况下继续使用,因此用户非常快速地点击按钮只会暂时降低体验。

话虽这么说,当HTML文档加载所有脚本时,DOM基本上就绪了。由于在加载JavaScript代码之前无法执行有意义的JavaScript(duh),因此我将仔细研究页面性能。发送HTML文档和2,3个JavaScript文件不应该很慢。

您还可以使用旧式内联事件处理程序,例如<button onclick="registerButtonClickEvent()">。然而,这将引入一个复杂的,可能有缺陷且难以测试的暂时事件持有层。

答案 1 :(得分:0)

onload事件不会从所有html元素触发,因此您强制等待窗口加载。加载jQuery的位置并不重要,因为它必须等待文档准备好。加载jQuery加上文档其余部分所需的总时间将是相同的。

答案 2 :(得分:0)

  

我知道在这个js操作的html之后立即放置内联代码就可以解决这个问题,但如果那个代码使用了尚未加载的jQuery这样的库呢?

这将是唯一的方法。 HTML从上到下进行解析。因此,您可以预期包含的所有脚本在您加入后都可以访问。

答案 3 :(得分:0)

如果您的<script src="jquery-whatever.js>行位于HTML中的第一个可点击元素之前,则可以保证在用户点击任何有用的内容之前加载并运行jquery库。

只是不要向脚本元素添加async或defer属性。