请不要将字符串传递给setInterval
,JS 函数是一流的对象,因此它们可以作为参数传递,分配给变量或由其他函数返回。在您的示例中,我将编写以下内容:
<input type="button" value="Start" id="intervalStart"/>
<input type="button" value="Start" id="intervalStop"/>
然后,JS:
window.onload = function()//not the best way, but just as an example
{
var timer, num = 0,
numDiv = document.getElementById('num_div');//<-- only scan dom once, not on every function call
document.getElementById('intervalStart').onclick = function(e)
{
this.setAttribute('disabled','disabled');//disable start btn, so it can't be clicked multiple times
timer = setInterval(function()
{
numDiv.innerHTML = ++num;
},1000);
};
document.getElementById('intervalStop').onclick = function(e)
{
document.getElementById('intervalStart').removeAttribute('disabled');//enable start again, you could do the same with disable btn, too
clearInterval(timer);
num = 0;
numDiv.innerHTML = '';
};
};
这段代码需要做更多的工作,尽管至少它不会过多地污染全局命名空间。
请注意,我使用了一个变量来引用num_div
元素,这样您的间隔回调函数就不必每 1000 毫秒扫描整个 DOM 以查找该元素。不多,但请记住,每次使用 jQuery 选择器或getElement(s)By*
方法时,JS都必须遍历 DOM 并查找元素。保留对您将需要很多元素的引用只会使脚本更有效。