※ ChatGPTを利用し、要約された質問です(原文:ストップウォッチのjavascriptがうまく動きません。)
ストップウォッチのjavascriptがうまく動かない
このQ&Aのポイント
質問者が作成したストップウォッチのjavascriptが正常に動作しない状況について相談しています。
質問者はストップウォッチのテキストフォームが予想と異なる値になっていることに困っており、オブジェクト形式を維持しながら動作する方法を知りたいとしています。
質問者の環境はWindows XP Professional SP2であり、使用しているウェブブラウザはFirefox2.0.0.3およびInternetExplorer6.0です。
ストップウォッチのjavascriptがうまく動きません。
こんにちは、片岡と言います。
次のファイル"stopwatch.html"を実行すると、ストップウォッチとして動作しません。
原因または解決策をご存知の方はいらっしゃいませんか。
●stopwatch.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=Shift_JIS">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<title>ストップウォッチ</title>
<script language="JavaScript" type="text/javascript">
<!--
function startWatch() {
document.myForm.display.value = this.time;
this.timeoutID = setTimeout("startWatch()", 1000);
this.time++;
}
function getTimeoutID() {
return this.timeoutID;
}
function setTime(time) {
this.time = time;
}
function StopWatch(){
this.time = 0;
this.timeoutID = null;
this.getTimeoutID = getTimeoutID;
this.startWatch = startWatch;
this.setTime = setTime;
}
var sWatch = new StopWatch();
//-->
</script>
</head>
<body bgcolor="#ffffff">
<h1>ストップウォッチ</h1><hr>
<form name=myForm><p>
<input type="text" name="display" size=20 value=0>秒
<input type="button" value="START"
onclick="sWatch.setTime(0);sWatch.startWatch()">
<input type="button" value="STOP"
onclick="clearTimeout(sWatch.getTimeoutID())">
<input type="button" value="RESET"
onclick="clearTimeout(sWatch.getTimeoutID());sWatch.setTime(0);document.myForm.display.value=0">
</p></form>
</body>
</html>
"stopwatch.html"を実行すると、textform が、以下のようになりました。
>"0" → "undifined" → "NaN"
しかし、私は、textform が
>"0" → "1" → "2" → ...
になると思っていました。
私は、"stopwatch.html"のオブジェクト形式を維持したいと思っています。
そのため、setTimeout()の中でthisを使いたいと思っています。
どのようにすれば、"stopwatch.html"をうまく動作させることができますか。
なお、"stopwatch.html"ファイルは、
JavaScriptプログラミング入門 第2版
( http://ssl.ohmsha.co.jp/cgi-bin/menu.cgi?ISBN=4-274-06660-6 )
の258ページの"stopwatch.html"を参考にしました。
●私の環境は以下の通りです。
OS: Microsoft Windows XP Professional SP2
webブラウザ: Firefox2.0.0.3, InternetExplorer6.0
お礼
kyon2_PaPa さん回答ありがとうございます。 まず、私が、プログラムリストの写し間違いをしました。 正しい質問は、 誤 this.timeoutID = setTimeout("startWatch()", 1000); 正 this.timeoutID = setTimeout("this.startWatch()", 1000); です。 > this.timeoutID = setTimeout("sWatch.startWatch()", 1000); これで、うまく動作しました。 kyon2_PaPa さん、ありがとうございます。 また、私の質問の仕方が悪くて、ごめんなさい。