我使用jQuery的getScript()加载单独的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 );发布于 2013-07-28 10:04:59
done回调从未被触发,因为您已经显式地创建了一个Deferred,并且从未解析它。$.when等待所有承诺得到解决。
$.Deferred中的代码
$( deferred.resolve );...will将Deferred的resolve函数调度为ready回调,但是该函数将被错误的this调用(document而不是Deferred对象;more:http://blog.niftysnippets.org/2008/03/mythical-methods.html),这可能会导致它抛出错误ready掩码。
只需完全删除该$.Deferred,或者如果您的目标是等待ready,则确保在调用resolve时正确设置了this
$.Deferred(deferred) {
$(function() {
deferred.resolve();
});
})或者:
$.Deferred(deferred) {
$($.proxy(deferred.resolve, deferred));
})或者,但请注意以下评论:
$.Deferred(deferred) {
// Deprecated in jQuery 1.8
$(document).on("ready", deferred, "resolve");
})https://stackoverflow.com/questions/17907046
复制相似问题