[英]In jQuery: How to fire a custom deferred event
我有一个这样的插件:
(function($){
$.fn.extend({
myplugin: function () {
var jobs = [];
this.each(function(){
jobs.push($(this).one(
'load',
function(){
// Line A: "Load" fires here
// Replace image source
$(this).attr('src','new_url');
// Line B: Everything is done, fire now!
}));
});
// Callback
$.when.apply(null,jobs).then(function(){
alert($(this).attr('src'));
});
return this;
}
});
})(jQuery);
when
助手始终警告旧图像源。 因为它是在A线上 load
后调用的 。 但我需要在B线上开火。
怎么解决这个? 有任何想法吗?
谢谢!
你没有把任何延期传递给when
。 你传递的只是一个jQuery对象数组。
为集合中的每个项创建一个新的deferred
,然后在事件侦听器中resolve
它:
(function($){
$.fn.myplugin = function () {
var deferreds = [];
this.each(function() {
var deferred = $.Deferred();
deferreds.push(deferred);
$(this).one('load', function() {
this.src = 'new_url';
deferred.resolve();
});
});
$.when.apply($, deferreds).then(function() {
alert('All sources have been changed.');
});
return this;
};
})(jQuery);
为了更简洁,您可以将函数传递给延迟构造函数:
this.each(function (i, element) {
deferreds.push( $.Deferred(function (deferred) {
$(element).one('load', function() {
this.src = 'new_url';
deferred.resolve();
});
}));
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.