に文字列を渡さないでください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
すれば、インターバルコールバック関数は1000msごとにその要素のDOM全体をスキャンする必要がありません。それほど多くはありませんが、jQueryセレクターまたはメソッドを使用するたびにgetElement(s)By*
、JSはDOMをトラバースして要素を探す必要があることに注意してください。たくさん必要になる要素への参照を保持することは、より効率的なスクリプトになります。