延迟内联脚本在MVC中的jquery之后加载

时间:2014-01-18 15:47:50

标签: jquery delay asp.net-mvc-5

我有一个关于延迟加载sciprts的问题。

所以基本上只是告诉你我的情况:

我有一个页面,在页面的末尾我加载了jquery和其他一些脚本,所以首先加载所有的html,然后才开始加载脚本。

但是在我网页上的某些地方,我不得不写一些内联脚本,需要使用jquery之类的东西,如$ ...如果找不到,我会收到错误。

我不能将该内联脚本放在seperat js文件中并在最后加载它,因为在mvc中我无法接近模型并从控制器调用动作。

那么有没有办法说出jquery之后的加载?

2 个答案:

答案 0 :(得分:0)

只需在javascript文件最底部的html页面的window.onload事件中指定一个方法。

 window.onload = function ()
 {
    do your jQuery thingies here.
 }
浏览器下载了所有页面资源(包括外部css和js文件)后,

window.onload事件将触发。

更新:请将所有内联脚本放在html5页面的底部,这是一个很好的做法。此外,将所有javascript文件放在一个单独的JS文件上将为您提供诸如缩小javascript和将外部js文件缓存到浏览器等优点,从而加快加载速度。

答案 1 :(得分:0)

对于在头部加载jQuery不可取或不可能的情况,这是我的解决方案。

它涉及在头部声明一个临时$函数,该函数使用 jQuery-esque 语法收集内联发生的任何函数。

真正的jQuery然后加载并覆盖window.$,但留下存储在var inlines中的函数数组,然后可以在jQuery可用时处理。

<html>
    <head>
        ...
        <script>

        var inlines = [];

        window.$ = function(inline) {
            inlines.push(inline);
        };

        </script>

    </head>
    <body>
        ...


        <script>

            $(function() {
                // Do some jQuery stuff.
            }

        </script>

            ...
        <script... load jQuery here!! ></script>
        <script>
            for(var i = 0; i < inlines.length; i++) {
                inlines[i]();
            }
        </script>
    </body>
</html>

我还成功地将这种方法应用于内联require.js需要调用,然后才知道依赖项被加载。