在Javascript中清除Var或回调

时间:2012-04-06 19:48:26

标签: javascript jquery callback clear

抱歉,我不确定我是否正确地提出了这个问题。当用户更改日期时,页面上的日期倒计时会发生变化。如果日期更改多次,则会闪烁所有日期更改。我想它是在某处存储以前的信息。我试过清除变种。

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 个答案:

答案 0 :(得分: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。这可能是你遇到的问题。

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

P.S。 JSFiddle:http://jsfiddle.net/PE9eW/

答案 1 :(得分:1)

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