obj.document.getElementById('clock');
obj
はこの時点では未定義なので、をスローしreferenceError
ます。おそらくあなたは意味しました:
var obj = document.getElementById('clock');
if (obj != "false")
文字列と比較しているため、これはおそらく機能しません。obj
がオブジェクトかどうかを確認したい場合null
は、
if (obj)
obj = mytime;
これは元のを変更しませんobj
が、それへの参照を保持している変数を上書きします。おそらくあなたが欲しかった
obj.innerHtml = mytime;
また、HTMLをから変更します
<p id="clock">The time according to your PC is :</p>
に
<p>The time according to your PC is :<span id="clock"></span></p>
テキストを上書きせず、時計を上書きするようにします。
onclick="setTimeout('"
...
onclick="int=window.clearInterval(int)"
欠落している部分があります:
onclick="timer = setInterval(clock, 1000)"
...
onclick="window.clearInterval(timer)"
ここで、最初の引数は繰り返し呼び出される関数であり、2番目の引数はミリ秒単位の呼び出しの頻度です。また、の戻り値は、clearInterval
によって返される値である必要があるため、特に有用ではないことに注意してくださいsetInterval
。
setTimeout
また、(関数を1回呼び出す)とsetInterval
(繰り返し呼び出す)の違いにも注意してください。
timer
また、変数がグローバルスコープに存在することにも注意してください。これは、大規模なプロジェクトでは問題になる可能性があります。また、タイマーを数回開始すると、今は停止できないため、問題が発生します。代わりに(最後にbody
)これを検討してください(そして両方の入力に正しいIDを割り当ててください):
(function(){ //create a scope
var timer; //create a local variable
document.getElementById("clock-start")
.addEventListener("click", function(){
if(!timer) timer = setInterval(clock, 1000);
})
document.getElementById("clock-stop")
.addEventListener("click", function(){
clearInterval(clock);
})
})() // remember to call our anonymous function
またはjQueryバージョン(ドキュメント内の任意の場所):
$(document).ready(function(){ //execute on DOM ready
var timer;
$("#clock-start").on("click", function(){
if(!timer) timer = setInterval(clock, 1000);
})
$("#clock-stop").on("click", function(){
clearInterval(clock);
})
});