延迟js加载的最佳方法?

时间:2015-02-06 23:01:43

标签: javascript ajax twitter-bootstrap event-handling

我使用的引导主题需要一些javascript文件。在我的一些页面上,我从服务器加载了相当多的内容,这意味着在评估javascript文件时页面上并不是所有的html。

这可以防止事件处理程序绑定到评估javascript后加载的html。到目前为止,我已经通过在ajax调用完成后加载脚本来修复问题,但这对我来说似乎很不错。这是我的职责:

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

我觉得有更好的方法可以做到这一点。有吗?

1 个答案:

答案 0 :(得分:1)

除了动态加载metroui库之外,还有一种更简洁的解决方法。看起来它依赖于jQuery的.ready()来了解页面何时被加载以及何时可以初始化它的东西。但是,这对您没有用,因为您通过Ajax动态加载内容。

你可以做的是你可以暂停jQuery ready()通知,直到加载你的ajax内容。然后,这将阻止启动Metro的初始化,直到加载动态内容为止。这样,您就可以像他们的文档建议一样在<script>部分的库存<head>标记中加载metro。这种方法的工作方式是在加载jQuery后将其添加到<head>部分:

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

然后,在您的ajax代码成功完成之后,执行此操作(在您将新内容放入页面后,从成功处理程序中执行此操作):

 jQuery.holdReady(false);

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

jQuery.holdReady(...)jQuery doc