0

我有这个倒计时

(function($){

    var options = {
        display_as_text     : false,
    remaining : 0,
        separator           : ':',
        significant_days    : 3,
    display_on_complete : null, // id of element to display when countdown is complete
    hide_on_complete : null // hide the timer once it hits zero
    };

    $.fn.countdown = function (config_options)
    {
        /*
         * Initialise
         *
         * Prepare data and trigger regular execution of code
         *
         * @param   container   Reference to DOM element where counter will be displayed
         */
        var initialise = function (container){

        }

        var update = function (seconds_remaining){          

        }

我需要访问更新并根据我发送的值重置时间,但我不知道如何访问它。这是我实例化插件的方式

$('#timer').countdown({remaining : 1000});

但是我如何调用更新来更新秒...我试图将它设置为一个变量并调用它但没有去...任何想法

4

2 回答 2

1

最常见的方法(我见过)是做 jQuery-UI 风格的事情:

  1. $(selector).plugin({...})绑定插件并允许以通常的方式链接。
  2. $(selector).plugin('method')method作为访问者调用。
  3. $(selector).plugin('method', arg)method作为具有指定的 mutator调用arg

因此,在您的情况下,您需要在插件中添加一些参数解析逻辑,以便您可以说出类似$(selector).countdown('update', 11).

您可以使用$.isPlainObjectandarguments来确定插件的调用方式,并将可变长度参数列表分开:

$.fn.countdown = function(options) {
    if(!$.isPlainObject(options)) {
        var stdarg = Array.prototype.slice.call(arguments);
        if(stdarg[0] == 'update' && stdarg.length > 1) {
            return this.each(function() {
                // Set up value using stdarg[1]
            });
        }
        // ...
    }

    return this.each(function() {
        // Bind as usual
    });
};

还有一个简单的演示(现实当然会更干净,更有条理):http: //jsfiddle.net/ambiguous/DEVBD/

于 2012-04-22T19:43:45.563 回答
0

我不确定您是否要检索剩余的秒数或调用update插件内的函数。但无论哪种方式,如果不查看完整源代码,就无法判断这是否包含在插件中。

如果你操作它,你总是可以向插件添加一个自定义 API,在插件范围内使用类似这样的东西:

$(this).data('countdown', {
    update: update
});

然后使用以下命令调用它:

$('#timer').data('countdown').update(12345);

同样的想法也适用于获取内部变量,例如剩余秒数,f.ex:(假设调用了内部变量seconds_remaining):

$(this).data('countdown', {
    getSecondsRemaining: function() {
        return seconds_remaining;
    }
});

接着:

$('#timer').data('countdown').getSecondsRemaining();
于 2012-04-22T19:22:57.307 回答