Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JavaScript中检测document.ready?_Javascript_Jquery - Fatal编程技术网

如何在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');
    });