延迟js加载的最佳方式



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

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

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

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

解决这个问题的方法可能比动态加载metrui库更简单。看起来它依赖于jQuery的.ready()来知道页面何时加载以及何时可以初始化它的内容。但是,这并不适用于您,因为您是通过Ajax动态加载内容的。

您可以做的是将jQuery ready()通知推迟到ajax内容加载之后。这将推迟启动metro的初始化,直到加载动态内容之后。这将允许您像他们的文档建议的那样,在<head>部分的库存<script>标签中加载metro。它的工作方式是在加载jQuery后将其添加到<head>部分:

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

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

 jQuery.holdReady(false);

然后它释放jQuery来调用它的.ready()处理程序,metro将在您的内容加载后执行它的操作。

jQuery.holdReady(...)参见jQuery文档。

相关内容

  • 没有找到相关文章

最新更新