Javascript 如何定义.done()
我正在尝试实现deffered done函数的调用,但找不到实现的方法:Javascript 如何定义.done(),javascript,jquery,Javascript,Jquery,我正在尝试实现deffered done函数的调用,但找不到实现的方法: jQuery.fn.imageload=function(src) { $this=$(this); var img=new Image(); img.src=src; if (img.complete) {done();return;} img.onload=done; function done() { console.log('done');
jQuery.fn.imageload=function(src) {
$this=$(this);
var img=new Image();
img.src=src;
if (img.complete) {done();return;}
img.onload=done;
function done() {
console.log('done');
$this.empty().append(img);
}
return $this;
}
$('div').imageload('http://placehold.it/350x150').done(function() {
//this not called
console.log('done loading');
});
我应该在插件声明中添加什么来调用。在图像加载后完成
您需要使用对象
基本上,延迟对象有一个解析方法。当触发此命令时,意味着发生的任何异步进程都已完成。触发解析时,将依次调用所有分配了done和then的回调。传递给resolve方法的值将传递给这些回调(在本例中为img变量)
您需要使用对象
基本上,延迟对象有一个解析方法。当触发此命令时,意味着发生的任何异步进程都已完成。触发解析时,将依次调用所有分配了done和then的回调。传递给resolve方法的值将传递给这些回调(在本例中为img变量)。我将尝试使用。我想这是可行的:
$.fn.imageload = function(src) {
$this = this;
return $.Deferred(function() {
var self = this,
img = new Image();
img.onload = function() {
$this.empty().append(img);
self.resolve();
};
img.src = src;
});
}
$('div').imageload('http://placehold.it/350x150').done(function () {
console.log('done loading');
});
我会尽量利用它。我想这是可行的:
$.fn.imageload = function(src) {
$this = this;
return $.Deferred(function() {
var self = this,
img = new Image();
img.onload = function() {
$this.empty().append(img);
self.resolve();
};
img.src = src;
});
}
$('div').imageload('http://placehold.it/350x150').done(function () {
console.log('done loading');
});
我会:
jQuery.fn.imageload = function(src) {
var self = this,
img = new Image(),
def = new jQuery.Deferred();
if (img.complete) {
def.resolve();
}
img.onload = function() {
console.log('done');
self.empty().append(img);
def.resolve();
}
img.src = src;
return def.promise();
}
$('div').imageload('http://placehold.it/350x150').done(function() {
console.log('done loading');
});
我会:
jQuery.fn.imageload = function(src) {
var self = this,
img = new Image(),
def = new jQuery.Deferred();
if (img.complete) {
def.resolve();
}
img.onload = function() {
console.log('done');
self.empty().append(img);
def.resolve();
}
img.src = src;
return def.promise();
}
$('div').imageload('http://placehold.it/350x150').done(function() {
console.log('done loading');
});
与.done或deferred不相关,但此片段在某些版本的IE中不起作用。若要修复IE,需要在设置onload后设置src。与.done或deferred不相关,但此片段在某些版本的IE中不起作用。若要修复IE,需要在设置onload后设置src。我不确定是否收到此消息,但是当图像加载时,它是如何触发的呢?我知道延迟对象是如何工作的,但是当图像加载时,您不解析它,只是在完成时?如果img.complete没有触发,你如何知道图像何时加载而没有onload函数?我不确定我是否得到了这个,但是当图像加载时它是如何触发的?我知道延迟对象是如何工作的,但是你只有在完成后才在图像加载时才解析它?如果img.complete没有启动,您如何知道图像在没有onload功能的情况下何时加载?似乎不起作用,def没有方法'resolve'@eicto-实际上在1.9中有一个更改,您现在构建了一个新的Deferred,所以请尝试上面的代码。您需要调用Deferred。目前它是对该函数的引用。似乎不起作用,def没有方法'resolve'@eicto-实际上在1.9中有一个更改,您现在构建了一个新的Deferred,所以请尝试上面的代码。您需要调用Deferred。目前它是对该函数的引用。