为setInterval调用的函数提供参数

时间:2013-06-07 23:35:58

标签: php javascript

我有以下功能:

<script>
    var count=900;
    var countM;
    var counter=setInterval(timer, 1000); //1000 will  run it every 1 second

    function timer()
    {
        count=count-1;
        countM=Math.floor(count/60);
        if (count <= 0)
        {
            clearInterval(counter);
            return;
        }

        for(var i=0; i<10; i++)
        {
            document.getElementById("timer"+i).innerHTML=countM+"mins. "+(count%60)+ " secs"; // watch for spelling
        }
    }
</script>

我正在显示它:

<span id="<?php echo "timer".$theCounter; ?>"></span>
$theCounter++;

问题是我想给它一个参数,它将是count并且我不知道该怎么做。

3 个答案:

答案 0 :(得分:1)

  

'我想给它打电话给它一个参数,它将是“计数”'

如下所示:

function createTimer(count) {
    var countM,
        counter=setInterval(timer, 1000);

    function timer()
    {
        count -= 1;
        countM = Math.floor(count/60);
        if (count <= 0) {
            clearInterval(counter);
            return;
        }
        for(var i=0; i<10; i++) {
            document.getElementById("timer"+i).innerHTML=countM+"mins. "+(count%60)+ " secs"; 
        }
    }
}

...将为您提供一个函数createTimer(),您可以使用参数调用该函数:

createTimer(900);

如果你说你想要不同的跨度来拥有不同的计数器,那么你可以这样做:

function createTimer(count, elementID) {
   // code exactly the same as above function except
   // remove the `for` loop and just reference the elementID
   // passed into the function:
   document.getElementById(elementID).innerHTML=countM+"mins. "+(count%60)+ " secs"; 
}

createTimer(900, 'timer1');
createTimer(200, 'timer2');
// etc.

演示:http://jsfiddle.net/dUTk3/1/

答案 1 :(得分:1)

喜欢这个吗?

var counter = window.setInterval(function() {
    timer('parameter');
}, 1000);

我看不出javascript和PHP部分之间的关​​系。

答案 2 :(得分:0)

使用bind函数原型创建一个带有默认参数的函数。

timer.bind(null,count-1);

第一个参数是函数上下文(null表示全局),可选的以下参数是从左侧设置的函数参数。结果是新功能。所以在你的代码中:

function timer(count) {
    console.log(count); // do some stuff
    if(count>0) setTimeout(timer.bind(null,count-1),1000);
}

timer(10); // counts from 10 to 0 in 1s interval

请参阅the fiddle