2012-12-19 69 views
0

我想在文档准备好之后执行一些代码,并且所有的脚本加载完成。我用head.js加载脚本:

$(document).ready(function() { 
    head.js("script1.js", "script2.js", function() { 
     // code to execute 
    }); 
}); 

这样做,这样使得开始加载脚本等待$(文件)。就绪()。似乎尽快开始加载脚本以避免性能下降会更好。

有没有更好的方法来确保文档和脚本在执行代码块之前完全加载?

回答

1

最好交换代码。

head.js("script1.js", "script2.js", function() { 
    $(document).ready(function() { 
     // code to execute 
    }); 
}); 

脚本立即开始加载,然后当它们完成时,它们等待文档准备就绪,然后开始执行。

如果您将脚本移至关闭body标记之前并将domready处理程序全部移除,那将会更好。

+0

head.js文档说,“$(document).ready()”之类的“DOM就绪”事件在脚本到达“,所以这并不意味着它可能已经解雇了? – dougmacklin

+0

@DougieBear虽然即使有,但其内部的domready处理程序仍然可能会触发,尽管如果情况确实如此,就没有必要拥有它了。 –

+0

那么在这种情况下它会执行内部的代码,还是不会触发.ready事件? – dougmacklin

0

您可以使用.load先装入一切然后执行一切:

$(window).load(function() { 
    head.js("script1.js", "script2.js", function() { 
    // code to execute 
    }); 
}); 
+0

我需要确保文档上的所有元素都已加载,以便它们可以使用jquery – dougmacklin

0

把你的$(document)。就绪()代码在所有其他脚本?

+0

来修改head.ready()的作用是利用其他(第三部分)脚本的资源,而不是单独修改每个元素 – dougmacklin

+0

好的,这是一个很好的观点。我认为最好的解决方案是来自Kevin B – algorhythm

+0

更不用说,在页面的末尾放置'$(document).ready()'就不需要'$(document).ready()'。 –

0

你让事情太复杂了。如果您希望文档第一次加载,那么你的脚本加载,然后你可以</body>这样的权之前执行一些代码,那么只要把脚本标记在文档的末尾:

<head> 
</head> 
<body> 

Your regular HTML content here 
<script src="script1.js"></script> 
<script src="script2.js"></script> 
<script> 
// Put code here that you want to execute when document and scripts are ready 
</script> 
</body> 

你不需要动态加载回调为你描述的简单原因。

+0

不幸的是我无法做到这一点,因为我在Drupal的一个节点内工作。身体标签超出了我可以修改的范围。我只能将代码添加到文档 – dougmacklin

+0

中的内部div。也许你应该在你的问题中提到那个。 – jfriend00

+0

我尝试简化和概括问题,而不是将问题与特定的并发症卷入一起。考虑到这一点,你是否同意@KevinB的解决方案? – dougmacklin