jQuery setInterval给出了无效的参数

时间:2012-11-21 14:39:35

标签: javascript jquery html

早上好,我创建了一个获取所有美国时区时间的函数,并将它们返回给我,突出显示您所在的时区。问题是我希望它每分钟运行一次。当我使用setInterval函数时,我不断收到一个javascript错误,说“无效参数”。这是我在jsFiddle http://jsfiddle.net/Qg2eL/

中的代码
// Timezone
var arrTime = new Array();
var arrZone = new Array("ET","CT","MT","PT");

var getTimeZones = setInterval(timeZone(),60000);

function timeZone(){
    var location = 0;
    var current_date = new Date();
    var offset = parseInt(-current_date.getTimezoneOffset() / 60);

    switch(offset){
        case -5:
            location = 0;
            break;
        case -6:
            location = 1;
            break;
        case -7:
            location = 2;
            break;
        case -8:
            location = 3;
            break;
    }

    arrTime.length = 0;
    for(var x=5; x<9; x++){
        var current_date = new Date();
        var utc_hour = current_date.getUTCHours() - x;
        var utc_minutes = current_date.getUTCMinutes().toString();

        var dd = "AM";
        if(utc_hour >= 12){
            utc_hour = utc_hour - 12;
            dd = "PM";
        }
        if(utc_hour == 0){ utc_hour = 12; }
        utc_minutes = utc_minutes<10?"0"+utc_minutes:utc_minutes;

        var formattedTime = utc_hour+":"+utc_minutes+" "+dd;

        arrTime.push(formattedTime);
    }

    var strHTML = "";
    strHTML += "<ul>";
    for(var x=0; x<arrTime.length; x++){
        strHTML += "<li>"+arrZone[x]+": "+arrTime[x]+"</li>";
    }
    strHTML += "</ul>";

    $('.timezoneHolder').html(strHTML);
    $('.timezoneHolder ul li:nth-child('+(location+1)+')').css({
        "color":"lime",
        "font-weight":"bold"
    });
}

3 个答案:

答案 0 :(得分:2)

非常常见的错误是你没有传递要执行的函数但实际上是在这行中调用它:

var getTimeZones = setInterval(timeZone(),60000);

相反:

var getTimeZones = setInterval(timeZone,60000);

PS。在Chrome和IE中测试过。并且没有弹出无效的参数。

编辑 :您在更改后没有看到它的原因是因为它只会在60秒后执行,所以你应该只是打电话给在setInterval之后执行,之后每60秒执行一次。

var getTimeZones = setInterval(timeZone,60000);
timeZone();

答案 1 :(得分:2)

setInterval函数可以运行自己的“回调”。语法稍微偏离了一点。试试这个:

var getTimeZones = setInterval(function() {
    timeZone();
},60000);

这个语法基本上说,每隔60000毫秒(或60秒)执行一次间隔内的功能。在这种情况下,setInterval函数会调用您的函数。

希望这有帮助。

答案 2 :(得分:1)

var getTimeZones = setInterval(timeZone,60000);

删除括号! :)