如何定义.done()
How to define .done()
我正在尝试实现对已定义的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');
});
http://jsfiddle.net/oceog/m4jvd/
加载图像后,我应该在插件声明中添加什么来调用.done()
?
http://jsfiddle.net/hnhGR/3/
您需要使用jQuery.Deferred对象。
$(function () {
$.fn.imageload=function(src) {
$this=$(this);
var img=new Image();
img.src=src;
var deferred = $.Deferred();
img.onload = function() {
deferred.resolve(img);
}
if (img.complete) {
img.onload();
}
deferred.done(function () {
console.log('done');
$this.empty().append(img);
return img;
});
return deferred;
}
$('#my-div').imageload('http://placehold.it/350x150').done(function(img) {
console.log('done loading', img);
});
});
基本上,Deferred对象有一个resolve()
方法。当它被触发时,意味着正在发生的任何异步进程都已完成。当激发解析时,将按顺序调用所有分配有done()
和then()
的回调。传递给resolve()
方法的值将传递给这些回调(在本例中为img
变量)。
我会这么做:
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');
});
我会尝试使用$.Deferred。我想这会起作用:
$.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');
});
http://jsfiddle.net/k6kuB/
相关文章:
- 用嵌套函数和默认函数定义函数
- Dojo不解析自定义小部件的模板html中的小部件声明性
- 为什么“;未定义的“;在JavaScript中结束循环
- 要求未定义JS回调参数
- 控制台返回var不是't定义,但它是
- 在自定义mean.io包中使用angular-chart.js作为依赖项
- 如何检查管道中未定义的项目
- TypeError:无法读取属性'推'未定义的JavaScript
- jQuery自定义验证比较多个输入的序列
- 查看JS对象的所有键,甚至是getter定义的键
- fetch() 函数未在 Ubuntu Chromium 浏览器上定义
- $window.ga在AngularJS事件中未定义
- 如何在JQuery函数中定义一个值,然后调用另一个函数并使用该值
- 是否有任何方法可以使用jQuery替换在数组中定义值的文本
- 未捕获的TypeError无法读取未定义的属性socialsharing
- XMLHttpRequest 预定义的 LOAD、DONE 等值在 Ripple 下变为未定义
- .connection.hub美元.Id在done函数中未定义
- 如何定义.done()
- Jasmin spy监听AJAX无法读取属性'done'的定义
- 使用Karma - done()运行的Mocha单元测试没有定义