Search code examples
jqueryfunctionpluginsparameterscountdown

Passing Parameters to onExpiry Function in jQuery Countdown plugin


So I'm using http://keith-wood.name/countdown.html to do a countdown and am trying to figure out how to pass some params to the callback function that can be set in the plugins' options:

 var param = 5;    
 initCount(param);

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

I took a look at the full version of jquery.countdown.js and found the developer literally saying this on Line 47 and Line 48: "// receives no parameters and 'this' is the containing division" Well, that's not good enough for me. Applying his options, he uses the following code: (Line 209)

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

So.... What would be the best way to change:

onExpiry.apply(target, [])

So that I could pass my params if needed in the options as proposed above?

Thoughts?


Solution

  • i have encoutered the very same probleme , thanks god i just found a round about solution here it is : you have to add a new parameter to the signature of options in 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:''
        };
    

    then you should add your identifier the call of the function

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

    then the call to your UpdateCountdown will look like this

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

    your function will look like this one :

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

    you can potentialy turn alwaysExpire on the Jquery.countdown.js to true , so you can test pre-expired dates .