2012-04-06 3 views
1

Извините, я не уверен, правильно задаю вопрос. Когда дата изменена пользователем, на странице изменяется количество обратных отсчетов. Если дата изменяется более одного раза, она мигает всеми изменениями даты. Я предполагаю, что он где-то хранит предыдущую информацию. Я попытался очистить вары.Очистить Var или Обратный вызов в Javascript

var deal_yeax = ''; 

, как я хотел бы сделать в PHP без везения

$('#deal_end').focusout(function() { 
var deal_end = $("#deal_end").val(); 
var array = deal_end .split('-'); 
var deal_montx = array[0]; 
var deal_dax = array[1]; 
var deal_yeax = array[2]; 

    deal_montx = deal_montx - 1; 

    $(function(){ 
    ts = new Date(deal_yeax , deal_montx , deal_dax ); 
    $(".h").countdown({ 
    timestamp : ts, 
    callback : function(days, hours, minutes, seconds){ 
    message_days = (days); 
    var message_hours = (hours); 
    $(".message_hours").text(message_hours + " Hours"); 
    var message_minutes = (minutes); 
    $(".message_minutes").text(message_minutes + " Minutes"); 
    var message_seconds = (seconds); 
     // Creat the display 
     if (message_days < 1 && message_hours < 1) { $(".message_seconds").text(message_seconds + " Seconds"); } 
     else if (message_days < 1 && message_hours > 1) { } 
     else if (message_days == 1) { $(".message_days").text(message_days + " Day"); } 
     else { $(".message_days").text(message_days + " Days"); } 

     if (message_days < 1 && message_hours < 1 && message_minutes < 1 && seconds < 1) { 
     $(".hide_my_buy_button").fadeOut("fast"); 
     } 
    } 
}); 
}); 
}); 
+2

'ts' и' message_days' являются глобальными переменными. Добавьте ** 'var' ** перед их первым использованием. – c69

+0

@ c69 спасибо, но это не решает мою проблему – MHowey

+1

@MHowey Вот почему он написал это в комментарии, а не в ответе. –

ответ

3

Каждый раз, когда вы «фокусируетесь» от #deal_end, вы присоединяете событие countdown к .h. Не зная точно, как работает countdown(...) (Хорошо, если вы предоставите источник, чтобы мы могли предоставить дополнительную помощь!), Один из способов устранить проблему, возможно, чтобы использовать функцию JQuery unbind(...) для удаления существующих слушателей в событии перед добавлением нового к нему.

Вот пример по этому вопросу:

<!-- HTML --> 
<div> 
    <input id="text" /> 
    <button id="clicker" /> 
</div> 

<!-- Javascript --> 
$('#text').focusout(function() { 
    var text = this.value; 

    // Everytime #text is "focused out", a new event is registered with #clicker. 
    $('#clicker').click(function() { 
     console.log('Value: ' + text); 
    }); 
}); 

... и вот как решить проблему

(Это всего лишь один из многих способов Таким образом, вероятно, не самый элегантный, но в любом случае.).
$('#text').focusout(function() { 
    var text = this.value; 

    $('#clicker').unbind('click'); 
    // Everytime #text is "focused out", a new event is registered with #clicker. 
    $('#clicker').click(function() { 
     console.log('Value: ' + text); 
    }); 
}); 

Итог: кажется, фокус (...) добавляет новый countdown каждый раз, когда он запускается. Это может быть проблема, с которой вы сталкиваетесь.

Не уверен, что это помогает? Лемм знает.

P.S. JSFiddle, чтобы пойти с этим: http://jsfiddle.net/PE9eW/

1

Проблема, кажется, с .countdown функции, которые вы используете в своем коде, чтобы прошить изменения даты. Когда вы назначаете новый объект с обратным отсчетом на $ (". H"), плагин или функция, вероятно, назначают ему какой-либо обработчик или интервал обработки, но он, похоже, не очищает старые, когда он вызывается снова, и это почему он мигает все даты для каждого обратного отсчета. Поэтому вам придется делать это вручную. Я не уверен, что вы используете внешний плагин или это ваша собственная функция, но вам нужно очистить существующие события или интервалы, назначенные вашему элементу при вызове функции. Я могу быть более полезным, если вы скажете мне, какой плагин вы используете или можете показать код, если это ваша собственная функция. (со ссылкой на .countdown())

Смежные вопросы