Передача параметров в функцию onExpiry в плагине отсчета jQuery - PullRequest
1 голос
/ 13 августа 2011

Поэтому я использую 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: "// не получает параметрови «это» - разделение, содержащее « Ну, это не достаточно хорошо для меня.Применяя свои параметры, он использует следующий код: (строка 209)

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

Итак ... Какой лучший способ изменить:

onExpiry.apply (target, [])

Чтобы я мог передать мои параметры, если это необходимо в опциях, предложенных выше?

Мысли?

Ответы [ 2 ]

5 голосов
/ 12 мая 2012

Я попробовал решение, которое было помечено как «правильное», и оно не сработало.Я отправил электронное письмо автору плагина 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);
}
4 голосов
/ 06 октября 2011

Я столкнулся с той же проблемой, слава богу, я только что нашел решение, вот оно: Вы должны добавить новый параметр в подпись параметров в 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);
}

вы можете потенциально повернуть AlwaysExpire на Jquery.countdown.js в значение true, чтобы вы могли проверить даты с истекшим сроком действия.

...