【问题标题】:Defer execution of widget js until page is fully loaded延迟小部件 js 的执行,直到页面完全加载
【发布时间】:2016-02-01 03:23:45
【问题描述】:

我有一个带有一些自定义 js 的小部件:

class ImagePreviewWidget(ClearableFileInput):

    ...

    class Media:

        css = {
            'all': ('css/image-preview-widget.css',)
        }
        js = ('js/image-preview-widget.js', )

自定义js使用jQuery,是独立加载的,所以我需要将我的模块初始化包装在:

window.onload = function() {
    cusomJsStart();
};

这不是很干净(一个问题是我可能会干扰其他window.onload 呼叫)。有没有更好的方法来加载小部件 javascript?

编辑

澄清一下:这个问题的重点是脚本运行时jQuery 尚未加载,并且脚本加载顺序不在我的控制范围内。

【问题讨论】:

    标签: javascript jquery django django-widget


    【解决方案1】:

    您应该使用addEventListener,而不是设置window.onload

    window.addEventListener("load", customJsStart);
    

    (如果您需要支持 IE

    如果您可以告诉 Django 将 defer 属性添加到您在 Media 类中传递的脚本中,那就更好了,但它还不支持。

    【讨论】:

    • 当天大奖!我们是仅有的两个清醒用户吗?
    • 那就是三个 ;-)
    【解决方案2】:

    没有什么比纯 Javascript 更好的了!或者,您可以像这样使用 JQuery:

    $(function(){
       cusomJsStart();
    });
    

    但是使用这种方法,您的页面会因为 JQuery 源文件加载而变得更重。

    或者您可以将cusomJsStart() 放在 HTML 文件的末尾,但它一点也不干净! 你做了正确的选择。

    【讨论】:

    • 我第二次提到这个(另一个答案已被删除),我认为从问题中很明显:问题的重点是 jQuery 尚未加载 当脚本运行时,脚本加载顺序不在我的控制范围内。我会把这个添加到问题中。
    猜你喜欢
    • 2020-08-20
    • 2018-06-06
    • 2023-03-05
    • 1970-01-01
    • 2019-01-08
    • 2014-09-25
    • 2016-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多