将参数传递给jQuery Countdown插件中的onExpiry函数

时间:2011-08-12 23:53:32

标签: jquery function plugins parameters countdown

所以我正在使用http://keith-wood.name/countdown.html进行倒计时,并试图弄清楚如何将一些参数传递给可以在插件选项中设置的回调函数:

 var param = 5;    
 initCount(param);

 function initCount(param) {
     $('selector').countdown({
       onExpiry:
       function endCount(param) {
         alert(param);
       }
     });
 }

我看了一下jquery.countdown.js的完整版本,发现开发人员在第47行和第48行说明了这一点:“//没有接收任何参数,'this'是包含的部门”< / strong>嗯,这对我来说不够好。应用他的选项,他使用以下代码:(第209行)

  

var onExpiry = this._get(inst,'onExpiry');                 if(onExpiry){                     onExpiry.apply(target,[]);                 }

那么....改变的最佳方式是什么:

  

onExpiry.apply(target,[])

如果需要在上面提出的选项中,我可以传递我的参数?

思想?

2 个答案:

答案 0 :(得分:5)

我尝试了标记为“正确”的解决方案,但它无效。我发送了一封电子邮件给Countdown插件的作者,他的回复如下。我在我的解决方案中实现了他的响应,它运行得很好!这是正确的方法:


您可以通过匿名函数传递额外的参数。像这样:

$('#countdown').countdown({until: +300, onExpiry: function() {
    myFunction(createdTime, searchText, updateDestination);
}});    

干杯

基思


顺便说一句,这是我的应用程序的工作代码:

function MakeTimer(timerNode, displayNode, searchTerm){
    // get the duration of the timer
    var duration = Number( $("#refreshTimer").val() );

    // create a new property and/or set property to creation time
    timerNode.prop('createdTime', new Date());
    timerNode.prop('searchTerm', searchTerm);

    //assumes that timerNode is a jQuery node and duration is an int
    //timerNode.countdown({until: duration, format: "s", compact: true, onExpiry: resetTimer});
    timerNode.countdown({until: duration, format: "s", compact: true, onExpiry: function() {
        resetTimer(timerNode, displayNode);
    }});

    // get twitter data
    getTwitterData(timerNode, displayNode);
}

function resetTimer(timerNode, displayNode){
    // get the current duration of the timer
    var duration = Number( $("#refreshTimer").val() );
    timerNode.countdown('change','until', duration);

    // get updated twitter data
    getTwitterData(timerNode, displayNode);
}

答案 1 :(得分:4)

我已经遇到了同样的问题,感谢上帝,我刚刚在这里发现了一个解决方案: 你必须在Jquery.countdown.js中的选项签名中添加一个新参数:

this._defaults = {
        until: null, // new Date(year, mth - 1, day, hr, min, sec) - date/time to count down to
            // or numeric for seconds offset, or string for unit offset(s):
            // 'Y' years, 'O' months, 'W' weeks, 'D' days, 'H' hours, 'M' minutes, 'S' seconds
        since: null, // new Date(year, mth - 1, day, hr, min, sec) - date/time to count up from
            // or numeric for seconds offset, or string for unit offset(s):
            // 'Y' years, 'O' months, 'W' weeks, 'D' days, 'H' hours, 'M' minutes, 'S' seconds
        timezone: null, // The timezone (hours or minutes from GMT) for the target times,
            // or null for client local
        serverSync: null, // A function to retrieve the current server time for synchronisation
        format: 'dHMS', // Format for display - upper case for always, lower case only if non-zero,
            // 'Y' years, 'O' months, 'W' weeks, 'D' days, 'H' hours, 'M' minutes, 'S' seconds
        layout: '', // Build your own layout for the countdown
        compact: false, // True to display in a compact format, false for an expanded one
        significant: 0, // The number of periods with values to show, zero for all
        description: '', // The description displayed for the countdown
        expiryUrl: '', // A URL to load upon expiry, replacing the current page
        expiryText: '', // Text to display upon expiry, replacing the countdown
        alwaysExpire: true, // True to trigger onExpiry even if never counted down
        onExpiry: null, // Callback when the countdown expires -
            // receives no parameters and 'this' is the containing division
        onTick: null, // Callback when the countdown is updated -
            // receives int[7] being the breakdown by period (based on format)
            // and 'this' is the containing division
        tickInterval: 1 ,// Interval (seconds) between onTick callbacks
        identifier:''
    };

然后你应该添加你的标识符函数的调用

if (onExpiry) {
                    onExpiry.apply(target,[this._get(inst, 'identifier')]);
                }

然后对UpdateCountdown的调用将如下所示

$('#defaultCountdown).countdown({identifier:1,onExpiry: yourFuncion, until: new Date('2012-01-04')});

你的功能将如下所示:

function yourFunction(id){
alert(id);
}

你可以将Jquery.countdown.js上的alwaysExpire变为true,这样你就可以测试过期的日期。