每次调用jqueryUI函数时调用函数

时间:2014-09-12 13:33:46

标签: javascript jquery jquery-ui

目前,每次调用jqueryUi的slideDown / -Toggle时,我都必须手动调用函数。

我现在每次都这样做:

$('.slideMeDown').slideDown();
$('.slideMeDown').promise().done(function(){
        functionICallEverytime();
    });

有没有更简单的方法来解决这个问题?我没有在jqueryUI的代码中找到从那里调用函数的段落......

使用 jQueryUI v1.11.0 jQuery v1.7.2

3 个答案:

答案 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);

演示:http://jsfiddle.net/tz4Lsrry/1/

现在每次使用$('.slideMeDown').slideDown(); functionICallEverytime都会在动画完成后调用。

同样return deferred;确保其他非默认承诺也可以使用:

$('.slideMeDown').slideDown().promise().done(function() {
    alert('another one');
});

以上示例将执行functionICallEverytime并在此之后执行alert('another one');