目前,每次调用jqueryUi的slideDown / -Toggle时,我都必须手动调用函数。
我现在每次都这样做:
$('.slideMeDown').slideDown();
$('.slideMeDown').promise().done(function(){
functionICallEverytime();
});
有没有更简单的方法来解决这个问题?我没有在jqueryUI的代码中找到从那里调用函数的段落......
使用 jQueryUI v1.11.0 jQuery v1.7.2
答案 0 :(得分:1)
您可以尝试覆盖slideDown函数。像这样:
$.slideDown = (function (originalSlideDown) {
return function () {
originalSlideDown.apply(this, arguments);
functionICallEverytime();
};
}($.slideDown));
希望它有所帮助。
答案 1 :(得分:1)
文档:http://api.jquery.com/slidedown/
签名:.slideDown( [duration ] [, complete ] )
$('.slideMeDown').slideDown(400, functionICallEverytime);
签名:.slideDown( options )
$('.slideMeDown').slideDown({ complete: functionICallEverytime });
而不是猴子修补,创建自己的插件。
$.fn.mySlideDown = function () {
this.slideDown.apply(this, arguments);
functionICallEverytime();
return this;
};
答案 2 :(得分:1)
这是你如何装饰原始的slideDown方法:
$.fn.slideDown = (function(orig, defaultCallback) {
return function() {
var deferred = orig.apply(this, arguments);
deferred.promise().done(defaultCallback);
return deferred;
};
})($.fn.slideDown, functionICallEverytime);
现在每次使用$('.slideMeDown').slideDown();
functionICallEverytime
都会在动画完成后调用。
同样return deferred;
确保其他非默认承诺也可以使用:
$('.slideMeDown').slideDown().promise().done(function() {
alert('another one');
});
以上示例将执行functionICallEverytime
并在此之后执行alert('another one');
。