【发布时间】:2012-05-04 04:57:00
【问题描述】:
我有一个网页,它的大部分内容都是在前端用 javascript 构建的。当基本的 HTML 被解析并构建了 DOM 树时,“ready”事件就会触发。在此事件中,将启动一个 javascript 代码,该代码会继续构建网页。
$().ready(function() {
$(document.body).html('<img src = "img.png" />');
$.ajax({
url: 'text.txt'
});
});
正如你在这个小例子中看到的,
- 新元素被添加到 DOM
- 更多内容,例如正在加载图片
- ajax 请求正在发送中
只有当所有这些都完成时,当浏览器的加载进度条第一次消失时,我才认为我的文档实际上已经准备好了。有没有合理的方法来处理这个事件?
注意这个
$().ready(function() {
$(document.body).html('<img src = "img.png" />');
$.ajax({
url: 'text.txt'
});
alert('Document constructed!');
});
还不够,因为 HTTP 请求是异步的。也许将处理程序附加到每个请求,然后检查所有请求是否都已完成是我想做的一种方法,但我正在寻找更优雅的东西。
附录: 我正在寻找的事件的更正式定义:
文档准备就绪且页面动态内容首次完成加载/执行时的事件,除非用户通过鼠标移动、点击等触发另一个事件。
【问题讨论】:
-
浏览器如何知道你已经调用了 AJAX 而不是呢?它没有!这是您必须在应用程序中处理的事情。
-
好吧,浏览器肯定知道动态内容何时第一次停止执行,因为进度条随即消失。但请注意,我不希望浏览器在 API 中公开这样的事件。但我正在寻找一个优雅的应用程序解决方案,如果有人听说过的话。
-
好吧,我必须删除我的答案,因为现在我完全不理解你想要什么了。
-
P.S.不要使用
$().ready(function(){,使用$(document).ready(function(){或更好$(function(){api.jquery.com/ready -
@Rocket 啊,谢谢。
ready事件显然与任何实际元素无关,所以我认为没有理由在其中放置一个 :) 不知道不推荐。
标签: javascript jquery javascript-events