みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ストップウォッチの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

投稿日時 - 2007-05-08 20:56:32

QNo.2984152

暇なときに回答ください

質問者が選んだベストアンサー

startWatchの部分ですが、

× this.timeoutID = setTimeout("startWatch()", 1000);
○ this.timeoutID = setTimeout("sWatch.startWatch()", 1000);

ではないでしょうか。

投稿日時 - 2007-05-08 21:55:39

お礼

kyon2_PaPa さん回答ありがとうございます。
まず、私が、プログラムリストの写し間違いをしました。
正しい質問は、
誤 this.timeoutID = setTimeout("startWatch()", 1000);
正 this.timeoutID = setTimeout("this.startWatch()", 1000);
です。

> this.timeoutID = setTimeout("sWatch.startWatch()", 1000);
これで、うまく動作しました。
kyon2_PaPa さん、ありがとうございます。
また、私の質問の仕方が悪くて、ごめんなさい。

投稿日時 - 2007-05-08 22:55:01

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問