Как я могу включить setInterval после того, как я вызвал clearInterval? - PullRequest
0 голосов
/ 22 сентября 2011

Вот мой javascript:

<script type="text/javascript">
var timer;

$(document).ready(function () {
    timer = setInterval(updatetimerdisplay, 1000);

    $('.countdown').change(function () {
        timer = setInterval(updatetimerdisplay, 1000);
    });

    function updatetimerdisplay() {
        $(".auctiondiv .auctiondivleftcontainer .countdown").each(function () {
            var newValue = parseInt($(this).text(), 10) - 1;
            $(this).text(newValue);

            if (newValue >= 9) {
                $(this).css("color", "");
                $(this).css("color", "#4682b4");
            }

            if (newValue == 8) {
                $(this).css("color", "");
                $(this).css("color", "#f3982e");
            }

            if (newValue == 5) {
                $(this).css("color", "");
                $(this).css("color", "Red");
            }

            if (newValue <= 1) {
                //$(this).parent().fadeOut();
                clearInterval(timer);
            }
        });
    }
});

var updateauctionstimer = setInterval(function () {
    $("#refreshauctionlink").click();
}, 2000);

function updateauctions(response) {
    var data = $.parseJSON(response);

    $(data).each(function () {
        var divId = "#" + this.i;
        if ($(divId + " .auctiondivrightcontainer .latestbidder").text() != this.b) {
            $(divId + " .auctiondivrightcontainer .latestbidder").fadeOut().fadeIn();
            $(divId + " .auctiondivrightcontainer .auctionprice .actualauctionprice").fadeOut().fadeIn();
            $(divId + " .auctiondivleftcontainer .countdown").fadeOut().fadeIn();
        }

        $(divId + " .auctiondivrightcontainer .latestbidder").html(this.b);
        $(divId + " .auctiondivrightcontainer .auctionprice .actualauctionprice").html(this.p);

        if ($(divId + " .auctiondivleftcontainer .countdown").text() < this.t) {
            $(divId + " .auctiondivleftcontainer .countdown").html(this.t);
        }
    });
}
</script>

По сути, я хочу снова включить таймер, если какой-либо элемент .countdown имеет изменение текста.

Текст изменится из-за вызова AJAX, который я использую для обновления этого значения.

В настоящее время таймер не включается снова и обратный отсчет останавливается после изменения значения .Countdown.Я думаю, что событие change () срабатывает, когда изменяется текст элемента.Это правильно?

Какие-либо вопиющие ошибки с моей стороны?

Ответы [ 2 ]

0 голосов
/ 22 сентября 2011

Ваш код содержит цикл и условие:

function updatetimerdisplay() {
    $(".auctiondiv .auctiondivleftcontainer .countdown").each(function () {
    ...
        if (newValue <= 1) {
            //$(this).parent().fadeOut();
            clearInterval(timer);
        }
        ...
    }
}

Весьма вероятно, что один из этих элементов имеет значение, которое удовлетворяет условию newValue <= 1.В этом случае таймер остановится.Даже если вы измените содержимое поля ввода, таймер сразу же остановится после этого запуска.

Если вам необходимо поддерживать несколько таймеров, используйте кошелек таймеров (var timers = {};timers.time1=... или var timers = [];timers[0] = ...).Если вам нужно поддерживать только несколько тайм-аутов, вы даже можете использовать переменные (var timer1=... ,timer2=..., timer3=...;).

0 голосов
/ 22 сентября 2011

Вы пытаетесь связать событие изменения до того, как элементы существуют.Поместите этот код в обработчик событий ready:

$(document).ready(function () {
  timer = setInterval(updatetimerdisplay, 1000);

  $('.countdown').change(function () {
    timer = setInterval(updatetimerdisplay, 1000);
  });

});

Вы также можете установить переменную timer в идентифицируемое значение, когда таймер выключен (например, null), чтобыпроверьте это значение перед запуском таймера, чтобы предотвратить запуск нескольких таймеров.

...