javascript - Javascript 中的动态 setInterval

标签 javascript arrays setinterval

我将在 HTML 中动态地为不同事件设置一个计时器。 有一个函数可以在ajax完成时生成HTML元素,如下所示:

function buildOnlineQuizIns(courseId, onlineQuizes) {
var items = '';
var d = new Date();
var timeStamp = d.getTime();
$.each(onlineQuizes, function (key, value) {
    var date1 = new Date(value['startDate']);
    var t1 = date1.getTime()+value['offsetTime']*60*1000;
    var date2 = new Date(value['endDate']);
    var t2 = date2.getTime()+value['offsetTime']*60*1000;

    var startDate = convertDate(value['startDate'], value['offsetTime']);
    var endDate = convertDate(value['endDate'], value['offsetTime']);
    items += '<table id="quizOnlineItem'+value['qsClassId']+'" class="quizOnlineItem">' +
            '<tr><td style="color: #0000cb; font-weight: bold; width: 70px;">Quiz Set:</td><td style="margin-left: 10px;">'+value['name']+'</td></tr>' +
            '<tr><td style="margin-right: 10px; color: #0000cb; font-weight: bold;">Header:</td><td>' + value['quizHeader'] + '</td></tr>' +
            '<tr><td style="margin-right: 10px; color: #00B300; font-weight: bold;">Start Date:</td><td>' + startDate + '</td></tr>' +
            '<tr><td style="margin-right: 10px; color: #DB3315; font-weight: bold;">End Date:</td><td>' + endDate + '</td></tr>' +
        '</table>' +
        '<div id="countdown'+value['qsId']+'" class="timer">test</div>';
    var timeLeft = '';
    if(timeStamp<t1){
        seconds[value['qsId']] = t1 - timeStamp;
        countdownTimer[value['qsId']] = setInterval(timer(value['qsId']), 1000);
    }else if(timeStamp>t1 && timeStamp<t2){
        seconds[value['qsId']] = t2 - timeStamp;
        countdownTimer[value['qsId']] = setInterval(timer(value['qsId']), 1000);
    }
});
return items;

}

还有一个定时器函数如下:

var countdownTimer = [];
var seconds = [];
function timer(qsId) {
    alert(countdownTimer[qsId]);
    var days        = Math.floor(seconds[qsId]/24/60/60);
    var hoursLeft   = Math.floor((seconds[qsId]) - (days*86400));
    var hours       = Math.floor(hoursLeft/3600);
    var minutesLeft = Math.floor((hoursLeft) - (hours*3600));
    var minutes     = Math.floor(minutesLeft/60);
    var remainingSeconds = seconds[qsId] % 60;
    if (remainingSeconds < 10) {
        remainingSeconds = "0" + remainingSeconds;
    }
    $('#countdown'+qsId).html(days + "day " + hours + ":" + minutes + ":" + remainingSeconds);
    if (seconds[qsId] == 0) {
        clearInterval(countdownTimer[qsId]);
        $('#countdown'+qsId).html("Completed");
    } else {
        seconds[qsId]--;
    }
}

但是,页面加载时没有任何更新。任何人都可以在这件事上帮助我。谢谢!!!

最佳答案

当你将一个函数传递给setInterval时,你必须传递该函数而不调用它:

执行此行时调用函数:

setInterval(timer(value['qsId']), 1000);

此函数仅在 1s 后调用:

setInterval(function() {
    timer(value['qsId'])
}, 1000);

Ps:没有检查这是否是问题所在,但我认为无论如何这都会是一个问题。

关于javascript - Javascript 中的动态 setInterval,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40508361/

相关文章:

javascript - Vue.js 中的循环变量与 AngularJS 类似

javascript - AdSense 广告有时不展示

java - 在 java 中传递数组时代码中的意外输出

javascript - (Javascript) 需要帮助将对象转换为数组

JavaScript:如何防止用户使 setInterval/setTimeout 事件崩溃?

javascript - 将类添加到 Android Webview 中的 DOM 元素时,CSS 样式更改需要 2-3 秒才能显示出来

c# - 如何从用户定义类列表中删除一个元素?

javascript - setinterval函数的问题

javascript - JS : Using a setTimeout inside a setInterval, setTimeout 无效

javascript - JS postMessage 不起作用