JS setInterval()函数无法正确触发

时间:2015-09-01 13:29:47

标签: javascript jquery django

我是JS的新手,我正在调试一段我没写过的代码。 我正在开展一个项目,我们需要处理一些基于交易的优惠。 DOM中的每个交易元素都有个人到期时间,我们使用倒计时器跟踪。 以下是包含计时器的html页面(Django模板):

<div class="countdown">
    <span class="countdown-time" data-remaining="{{ running_time }}"></span>
        {% if deal.is_normal %}
            <i class='fa fa-gavel'></i>
        {% elif deal.is_group%}
            <i class='fa fa-users'></i>
        {% elif deal.is_booking %}
            <i class='fa fa-pencil-square-o'></i>
        {% endif %}
</div>

<script type="text/javascript">
    function displayRange(seconds) {
        if (seconds <= 0) {
            return 'expired';
        }
        var count = seconds;

        hours = Math.floor(count/(60 * 60));
        count = count - hours * (60 * 60);

        minutes = Math.floor(count/60);
        seconds = count - minutes * 60;

        return sprintf("%02d", hours) + ':' + sprintf("%02d", minutes) + ":" + sprintf("%02d", seconds);
    }

    $('.countdown-time').each(function(index, el) {

        var that = $(this);
        var _el = el;

        var intervalID = setInterval(function() {

            var remaining = parseInt(_el.getAttribute('data-remaining'));
            var delta = Math.floor(new Date().getTime()/1000) + remaining;

            console.log(' delta ' + delta +' remaining= ' + remaining + ' that=' + that + ' _el ' + _el + ' index ' + index);

            that.html(displayRange(remaining));

            _el.setAttribute('data-remaining', remaining - 1);

            if(remaining < 0) {
                clearInterval(intervalID);
            }
        }, 1000);        
    });
</script>

setInterval 函数应该每秒调用一次

$('.countdown-time').each(function(index, el) {

每个DOM元素的类别为&#34;倒数时间&#34; 。 我期望倒数计时器每秒步进一步,并在相应的交易元素布局中显示结果。

对于 index 的每个元素,会发生的是 setinterval()并行触发

total_number_of_deal_elements_in_the_DOM - index
每秒

次。因此,例如,如果我总共有5个交易元素( total_number_of_deal_elements_in_the_DOM = 5),则具有 index = 1 的交易元素的倒数计时器每个步骤踩4秒> setinterval 循环,因为setInterval(function(....),1000)每秒并行调用4次。 index = 2元素计时器的步长为3秒,依此类推。

错误在哪里?

0 个答案:

没有答案