【问题标题】:What is the very first event fired by an HTML document?HTML 文档触发的第一个事件是什么?
【发布时间】:2013-03-22 01:27:01
【问题描述】:

我很好奇在使用 jQuery 和 jQuery Mobile 时哪个事件首先被触发。

奇怪的是,我得到的第一个控制台输出是pagebeforecreate,然后是document ready,然后是onload

我想知道在这些事件之前是否有其他事件被触发。

http://jsfiddle.net/yYGYe/2/

$('html').bind('pagebeforecreate',function(event) {
    console.log("pagebeforecreate");
});

$(document).ready(function() {
    console.log("document ready");
});

window.onload = function(){
    console.log("onload");
};

【问题讨论】:

  • 我们可以知道为什么吗?
  • 这是专门针对 jQuery Mobile 的吗?因为 pagebeforecreate 不是标准事件。
  • 为什么不在不绑定事件的情况下立即做你的事情?

标签: javascript jquery html jquery-mobile


【解决方案1】:

你的问题和你问的实际有点不同。

您询问第一个触发的事件是什么,但在上下文中您是在询问 pagebeforecreate 是否是您希望它成为页面上触发的第一个事件时要调用的函数。

如果您阅读了有关该问题的 jQuery Mobile 文档,它会说 pagebeforecreate 在任何“小部件”被实例化之前被调用。所以在这件事上;您放入其中的所有内容都将在所有 jQuery Mobile 小部件“之前”调用,但它本身并不是 HTML 页面上触发的第一个事件。

在 HTML 页面上触发的第一个事件可能是 document.readyState 被设置为 uninitialized,表示您的页面尚未准备好加载。这些都是就绪状态;

  • 未初始化(尚未开始加载)
  • 正在加载(正在加载)
  • interactive(已加载足够,用户可以与之交互)
  • 完成(满载)

【讨论】:

  • 我相信那个 readystatechange不可能没有听众
  • document.addEventListener('readystatechange', function(this) { ... }; 应该可以正常工作:) 但如果我错了,请纠正我。手头没有测试工具。
  • 你认为我能及时报名参加那个活动吗? :-)
  • 我的意思是,如果 DOM 没有开始加载,页面脚本也没有。
  • @JanDvorak 可以拦截“交互”和“完整”状态。见jsfiddle.net/Gs34Y。其实onreadystatechange就是jQuery在oldIE上用来模拟DOMContentLoaded的。
【解决方案2】:

您正在寻找的是 jQuery 移动事件模型生命周期的全面可视化,下面的图表可在 Pro jQuery Mobileon the author's blog 中找到:

请记住,这是 jQuery mobile 特定的。原生事件列表在 as part of the W3 spec 可用,唯一与文档生命周期相关的是旧的 load

【讨论】:

  • DOM Level 3 引入了DOMContentLoaded,它在load 之前触发。另外,这应该很有趣:w3.org/TR/2011/WD-html5-20110113/the-end.html.
  • @bfavaretto:我在争论是否要引用 DOM L3,因为它是一个尚未得到统一支持的工作草案。不过你是绝对正确的,+1
  • 我学会了假设 HTML、CSS 和 DOM 规范将处于“工作草案”状态永远!或者 将不得不永远等待。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-14
  • 1970-01-01
  • 2018-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多