2015-02-06 98 views
0

我正在使用需要几个JavaScript文件的引导主题。在我的一些页面上,我加载了很多来自服务器的内容,这意味着在评估javascript文件时,并不是所有的html都会出现在页面上。延迟js加载的最佳方法?

这可以防止事件处理程序绑定到javascript评估后加载的html。到目前为止,我已经通过在ajax调用完成后加载脚本解决了这个问题,但是这对我来说似乎很麻烦。这里是我的功能:

$.get("/path/to/rest/call", function(data) { 
    $('#htmlElement').html(data); 
}).done(function() { 
    $.getScript("/path/to/js/file.js"); 
}); 

我觉得有更好的方法来做到这一点。在那儿?

+1

对我来说没什么好笑的。当页面准备好该脚本时加载脚本。这就是你应该如何去做的。您可以更改脚本,以便在加载时不执行任何操作,然后您可以随时加载它。然后,当你的ajax调用完成时,你只需在该脚本中调用一个函数。这可以简化很多事情,因为当脚本从其中的函数被调用并执行时加载时会解耦。 – jfriend00 2015-02-06 23:06:12

+0

我想你是对的,但我正在加载的脚本是第三方库。我宁愿不去改变它以适应我的需求。 – jasono 2015-02-07 04:31:21

+1

因此,您有第三方库试图直接修改您的页面,而无需调用任何内容。这很奇怪。它是什么库? – jfriend00 2015-02-07 04:57:24

回答

1

与动态加载metroui库相比,可能有更简单的解决方法。它看起来像取决于jQuery的.ready()知道何时加载页面以及何时可以初始化它的东西。但是,这不适合你,因为你是通过Ajax动态加载内容的。

你可以做的是你可以拖延jQuery的ready()通知,直到你的ajax内容被加载。这会阻止地铁初始化的触发,直到您的动态内容加载完成。这将允许您像他们的文档所示,在<head>部分的股票<script>标记中载入地铁。这种工作方式是你将它添加到了<head>部分,加载的jQuery后:

<script> 
    jQuery.holdReady(true); 
</script> 

然后,你的后Ajax代码已经成功地完成了,你这样做(从成功处理程序,你已经把你的后新内容到页面):

jQuery.holdReady(false); 

,然后释放jQuery来调用它的.ready()处理程序和地铁会做的事情你的内容加载后。

请参阅jQuery doc对于jQuery.holdReady(...)

+0

我喜欢这种方式,谢谢。 – jasono 2015-02-08 01:35:56