如何在JavaScript中检测document.ready?
可能重复:如何在JavaScript中检测document.ready?,javascript,jquery,Javascript,Jquery,可能重复: 我有一个加载时执行的无框架javascript: function myJs() { // some code } window.load = myJs; 但这会导致脚本执行延迟。我希望能够在文档准备好进行操作时立即执行此脚本,甚至在页面完全完成加载之前。如何以跨浏览器兼容的方式实现这一点?换言之,政府如何: $(document).ready(function() { // }); 在普通的JS中可以说是jQuery的一部分吗?您可以在任何不需要的地方
我有一个加载时执行的无框架javascript:
function myJs() {
// some code
}
window.load = myJs;
但这会导致脚本执行延迟。我希望能够在文档准备好进行操作时立即执行此脚本,甚至在页面完全完成加载之前。如何以跨浏览器兼容的方式实现这一点?换言之,政府如何:
$(document).ready(function() {
//
});
在普通的JS中可以说是jQuery的一部分吗?您可以在任何不需要的地方创建一个函数,调用它
`<body onLoad="function();">`
``
Put
在
及
就在
之前,我已经做了一个实现(基于jQuery中的实现),您可以使用它:它实际上没有那么糟糕。您需要一种将事件添加到文档中的方法,以及这些事件应该是什么的知识。使用标准的addEvent
功能
function addEvent( obj, type, fn )
{
if (obj.addEventListener)
{
obj.addEventListener( type, fn, false );
}
else if (obj.attachEvent)
{
obj["e"+type+fn] = fn;
obj[type+fn] = function() { return obj["e"+type+fn]( window.event ); };
obj.attachEvent( "on"+type, obj[type+fn] );
}
}
您可以执行以下操作:
// IE
addEvent(document, 'DOMContentLoaded', function() {
alert('ready');
});
// Other
addEvent(document, 'onreadystatechange', function() {
if (document.readyState == 'complete')
alert('ready');
});
// For demonstration purposes, show a 'load' event
addEvent(window, 'load', function() {
alert('load');
});
IE事件处理程序不会在其他浏览器中启动,反之亦然
但这会导致脚本执行延迟。
我希望能够在文档准备就绪后立即执行此脚本
甚至在页面完全完成加载之前就已被操纵
有三种方法可以解决这个问题:
正如一些人已经建议的那样,您可以从jQuery源代码中获得灵感,并将其集成到脚本中。(我建议观看和观看
您可以将函数调用放在body标记的末尾,而不是head标记中。这允许在脚本启动之前加载所有DOM元素
如果您不需要使用DOM,您可以将其设置为一个自动执行函数,这样就不必等待任何操作。(function startNow(){}())
打开jquery并查看.ready函数。你能解释一下而不是-1告诉我吗?也许我会学到一些东西。.load
不同于。ready
-。load
在执行之前等待加载所有图像、脚本、外部资源等,而.ready
在加载所有DOM资源后执行(即HTML结构)。因此,如果一个页面同时具有.ready
和.load
,.ready
将在.load
之前和之后执行(在我重新阅读了我误解的问题之后)我同意。但是,那么,@Josh Stodola,与其回答这个蹩脚且无用的问题,还不如-1责怪所有人,为什么不直接用这个解释来回答这个人呢?:)我很确定stackoverflow的目标就是回答和解释(即使我刚刚注册)@库奇诺斯:好吧,我刚才在其他地方投票了你的两个答案,都是好答案。这不是一个好答案,所以我投了反对票。没什么大不了的。我不需要解释我自己……很明显,这个答案是不正确的和误导性的。@Josh Stodola:如果看起来是这样的话,请原谅,但我不是因为-1而责怪你,而是为了一个通信我不喜欢“嗯,不”,也不需要解释。这对你来说可能很明显,但对每个试图帮助你的人来说却不一样。更重要的是,如果你没有给最初的提问者一个正确的答案!但我的答案是错误的,它没有回答我误读的问题,所以我活该。我不在乎我的“分数”或它叫什么。唯一一个本机支持DOMContentLoaded
的IE版本是9。对于IE的旧版本,更改为onDOMContentLoaded,谢谢提醒。不是100%确定,但非常确定IE嘿,对js jere来说非常新。你能演示一下如何实现这一点吗。我是否会执行以下操作:onDomReady(function(){//code here})?你完全正确:)如果你想的话,你可以用不同的代码片段多次调用onDomReady。他们都将按顺序执行。如果还不清楚,您必须在调用之前包含我的代码。另外,如果您想更改函数的名称(“onDomReady”),请仅在第10行进行更改。非常感谢!我想你换了IE和其他的
//old IE
document.onreadystatechange = function() {
if (this.readyState === "complete"){
//whatev
}
};
//for everyone else
document.addEventListener("DOMContentLoaded", function () {
//whatev
}, false);
function addEvent( obj, type, fn )
{
if (obj.addEventListener)
{
obj.addEventListener( type, fn, false );
}
else if (obj.attachEvent)
{
obj["e"+type+fn] = fn;
obj[type+fn] = function() { return obj["e"+type+fn]( window.event ); };
obj.attachEvent( "on"+type, obj[type+fn] );
}
}
// IE
addEvent(document, 'DOMContentLoaded', function() {
alert('ready');
});
// Other
addEvent(document, 'onreadystatechange', function() {
if (document.readyState == 'complete')
alert('ready');
});
// For demonstration purposes, show a 'load' event
addEvent(window, 'load', function() {
alert('load');
});