如何在jQuery之前加载的闭包中检查/使用jQuery?

时间:2013-04-05 16:09:54

标签: javascript jquery closures

我有一个包含我的闭包的js文件,这个文件在jQuery之前加载,假设它无法移动。我如何传入或检查jQuery以便在闭包中使用它?

这是我到目前为止所得到的:

(function MyClosure() {

    var interval = setInterval(function() {
        if (typeof jQuery !== 'undefined') {
            doJqueryStuff();
            clearInterval(interval);
        }
    }, 500);

    function doJqueryStuff() {
        // Some stuff with jQuery.
    }
})();

它确实有效,但有“更好”的方式吗?每当我使用setInterval()这样的事情时,我总是认为自己做错了事,也就是我在500毫秒内失去时间的事实。

3 个答案:

答案 0 :(得分:4)

您可以等待并将执行附加到window.onload事件,假设加载窗口后加载了jQuery ...

window.onload = function() {
    // do stuff with jQuery
};

答案 1 :(得分:0)

别担心 - 虽然它确实看起来很黑(至少对我和你而言)但并不坏。通常,您需要等到复杂对象初始化并且您需要执行相同的操作。最好的办法是确保脚本加载的顺序可以解决任何依赖性问题 - 但正如您所要求的那样,我们假设订单无法调整。

我建议的唯一改进:向匿名setInterval函数添加一个转义填充。这样,如果jQuery由于某种原因永远不可用,脚本可以通知用户并停止检查。

var checkCount = 0;
var interval = setInterval(function() {
    if (checkCount++ > 20) {
        alert("jQuery could not be loaded - degrading user experience");
        clearInterval(interval);
    }
    if (typeof jQuery !== 'undefined') {
        doJqueryStuff();
        clearInterval(interval);
    }
}, 500);

答案 2 :(得分:0)

等待脚本标记上的onload事件。在这种情况下,doJqueryStuff应该是一个全局函数。

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js" onload='doJqueryStuff()'></script>