1

我正在使用 jQuerygetScript()加载单独的 javascript 文件。这些文件似乎加载得很好(我知道这是因为当我输入了一个不正确的 URL 时,它会抛出一个错误 - 正确的 URL 没有错误)。

但是,该done()功能似乎不起作用。控制台不会记录“完成”,也不会调用任何函数。

(function($) {
    $.when(
        $.getScript( templateUrl + "/assets/js/variables.js" ),
        $.getScript( templateUrl + "/assets/js/functions.js" ),
        $.getScript( templateUrl + "/assets/js/events.js" ),
        $.Deferred(function( deferred ){
            $( deferred.resolve );
        })
    ).done(function(){

        console.log("done");

        swapBackgroundImgs();
        singleLarge();
        bindFlexorder();
        bindSvgeezy();
        bindPlaceholder();
        preloadImages();

    });
})( jQuery );
4

1 回答 1

1

回调永远不会被触发,done因为您已经明确地创建了 aDeferred并且从未解决它。$.when等待所有的承诺得到解决。

你在你的代码$.Deferred

$( deferred.resolve );

...会将Deferred'sresolve函数安排为ready回调,但该函数将被错误地调用thisdocument而不是Deferred对象;更多:神话方法),这可能会使其引发错误ready埋葬。

只需完全删除它$.Deferred,或者如果您的目标是等待ready,请确保this在调用时正确设置resolve

$.Deferred(deferred) {
    $(function() {
        deferred.resolve();
    });
})

或者:

$.Deferred(deferred) {
    $($.proxy(deferred.resolve, deferred));
})

或者,但请注意评论:

$.Deferred(deferred) {
    // Deprecated in jQuery 1.8
    $(document).on("ready", deferred, "resolve");
})
于 2013-07-28T10:04:59.793 回答