使用jQuery,我们都知道很棒的.ready()函数:

$('document').ready(function(){});

然而,假设我想运行一个用标准JavaScript编写的函数,而没有库支持它,并且我想在页面准备好处理它后立即启动一个函数。正确的方法是什么?

我知道我能做到:

window.onload="myFunction()";

或者我可以使用body标签:

<body onload="myFunction()">

或者,我甚至可以在页面底部尝试所有内容,但结尾正文或html标记如下:

<script type="text/javascript">
    myFunction();
</script>

什么是以jQuery的$.ready()这样的方式发出一个或多个函数的跨浏览器(旧/新)兼容方法?


当前回答

您的方法(将脚本放在结束体标记之前)

<script>
   myFunction()
</script>
</body>
</html>

是支持新旧浏览器的可靠方式。

其他回答

这是Ramswaloop“适用于所有浏览器”的一个清理过的、非eval版本——适用于所有的浏览器!

function onReady(yourMethod) {
  var readyStateCheckInterval = setInterval(function() {
    if (document && document.readyState === 'complete') { // Or 'interactive'
      clearInterval(readyStateCheckInterval);
      yourMethod();
    }
  }, 10);
}
// use like
onReady(function() { alert('hello'); } );

然而,它确实需要额外等待10毫秒才能运行,所以这里有一个更复杂的方法不应该:

function onReady(yourMethod) {
  if (document.readyState === 'complete') { // Or also compare to 'interactive'
    setTimeout(yourMethod, 1); // Schedule to run immediately
  }
  else {
    readyStateCheckInterval = setInterval(function() {
      if (document.readyState === 'complete') { // Or also compare to 'interactive'
        clearInterval(readyStateCheckInterval);
        yourMethod();
      }
    }, 10);
  }
}

// Use like
onReady(function() { alert('hello'); } );

// Or
onReady(functionName);

另请参阅How to check if DOM is ready without a framework?。

准备好的

function ready(fn){var d=document;(d.readyState=='loading')?d.addEventListener('DOMContentLoaded',fn):fn();}

像这样使用

ready(function(){
    //some code
});

用于自调用代码

(function(fn){var d=document;(d.readyState=='loading')?d.addEventListener('DOMContentLoaded',fn):fn();})(function(){

    //Some Code here
    //DOM is avaliable
    //var h1s = document.querySelector("h1");

});

支持:IE9+

我不太确定你在问什么,但也许这会有所帮助:

window.onload = function(){
    // Code. . .

}

Or:

window.onload = main;

function main(){
    // Code. . .

}

HubSpot的好人有一个资源,你可以在那里找到纯Javascript方法来实现jQuery的很多优点,包括准备好

http://youmightnotneedjquery.com/#ready

function ready(fn) {
  if (document.readyState != 'loading'){
    fn();
  } else if (document.addEventListener) {
    document.addEventListener('DOMContentLoaded', fn);
  } else {
    document.attachEvent('onreadystatechange', function() {
      if (document.readyState != 'loading')
        fn();
    });
  }
}

内联用法示例:

ready(function() { alert('hello'); });

document.ondomcontentready=function(){}应该可以做到这一点,但它没有完全的浏览器兼容性。

看起来您应该使用jQuery min