1

抱歉,我不确定我问的问题是否正确。当用户更改日期时,页面上的日期倒计时会更改。如果日期更改不止一次,它会闪烁所有日期更改。我猜它是在某处存储以前的信息。我试过清除变量。

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"); 
        }
    }
});
});
});
4

2 回答 2

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);
    });
});

底线:似乎 focusout(...)countdown每次触发时都会添加一个新的。这可能是你遇到的问题。

不确定这是否有帮助?让我知道。

PS JSFiddle 与之配套:http: //jsfiddle.net/PE9eW/

于 2012-04-06T20:37:43.527 回答
1

问题似乎在于您在代码中使用的 .countdown 函数来刷新日期更改。当您为 $(".h") 分配一个新的倒计时对象时,插件或函数可能会为其分配一些事件处理程序或间隔,但是当再次调用它时似乎并没有清除旧的,那就是为什么它会闪烁每个倒计时的所有日期。所以你必须手动完成。我不确定您是使用外部插件还是您自己的函数,但您需要做的是在调用函数时清除分配给您的元素的现有事件或间隔。如果您告诉我您正在使用哪个插件,或者如果它是您自己的函数,可能会显示代码,我会更有帮助。(指 .countdown() )

于 2012-04-06T20:24:55.987 回答