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

noname#91531
noname#91531

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

  • ベストアンサー
noname#49664
noname#49664
回答No.1

startWatchの部分ですが、 × this.timeoutID = setTimeout("startWatch()", 1000); ○ this.timeoutID = setTimeout("sWatch.startWatch()", 1000); ではないでしょうか。

noname#91531
質問者

お礼

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

関連するQ&A

  • アラートとストップウォッチを合体させたいのですが

    どのようにしたらいいのか分かりません。 ストップウォッチ.htm <!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <meta content="text/html; charset=Shift_JIS" http-equiv=Content-Type> <meta http-equiv="Content-Script-Type" content="text/javascript"> <title>ストップウォッチ</title> <script type="text/JavaScript"> <!-- var a, b; var min, sec, cen, xmin, xsec, xcen; var hajime, ima, interval; var teishi; xmin=0; xsec=0; xcen=0; teishi=1; function dostart(){ if (teishi==1){ hajime=new Date(); a=hajime.getTime()-(xmin*60000+xsec*1000+xcen*10); count(); teishi=0; } } function count(){ interval=setTimeout("count()",10); ima=new Date(); b=ima.getTime(); min=Math.floor((b-a)/60000); sec=Math.floor(((b-a)%60000)/1000); cen=Math.floor((((b-a)%60000)%1000)/10); document.forms[0].elements[0].value=min; document.forms[0].elements[1].value=sec; document.forms[0].elements[2].value=cen; } function dostop(x){ clearTimeout(interval); xmin=eval(x.fun.value); xsec=eval(x.byo.value); xcen=eval(x.ika.value); teishi=1; } function doclear(){ clearTimeout(interval); xmin=0; xsec=0; xcen=0; document.forms[0].elements[0].value="0"; document.forms[0].elements[1].value="0"; document.forms[0].elements[2].value="0"; teishi=1; } function timeout(){ alert("10分経過しました。チネ!!"); } //--> </script> </head> <body bgcolor="#7fffd4" text="#000000" link="#0000ff" alink="#ff00ff" vlink="#00ffff"> <form action="this" method="post"> ストップウォッチ: <input size=3 name="fun" value="0">分 <input size=2 name="byo" value="0">秒 <input size=2 name="ika" value="0"> <br><br> <input type="button" value="スタート" onClick="dostart()" onKeyPress="dostart()"> <input type="button" value="ストップ" onClick="dostop(this.form)" onKeyPress="dostop (this.form)"> <input type="button" value="リセット" onClick="doclear()" onKeyPress="doclear()"> </form> </body> </html> アラート.htm <html> <head><title>テスト</title></head> <body onload=setTimeout('msgdsp()',600000)> <script language="JavaScript"> <!-- function timeout(){ alert("10分経過しました。"); } //--> </script> <input type=button value="スタート" onClick='setTimeout( "timeout()", 600000 )'><br><br> </body> </html> ・・・とそれぞれ作成しています。 ストップウォッチで「スタート」ボタンをクリックすると、ストップウォッチが走り、10分に差し掛かったところでアラートで「10分経過しました」と表示させたいのです。 どのようにすれば、2つの機能を同時に動かすことができるのか、ご教授いただきたいです。 環境はWindows XP、Internet Explorer7.0です よろしくお願いします。

  • このJavaScriptはなんか早い・・・

    <html> <head> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <META name="GENERATOR" content="IBM WebSphere Studio Homepage Builder Version 6.5.0.0 for Windows"> <META http-equiv="Content-Style-Type" content="text/css"> <TITLE>タイマー</TITLE> </head> <body> <script language="JavaScript"><!-- myCnt = 0; myTim = 0; function myGo(){ mySelect = document.myForm.myMenu.selectedIndex; myCnt = eval(document.myForm.myMenu.options[mySelect].value); myTim = setInterval("myTimer()",1000); } function myTimer(){ myCnt = myCnt-1; document.myForm.myFormSec.value = myCnt + " 秒"; if (myCnt == 0){ clearInterval(myTim); alert("制限時間を終了しました。"); } } // --></script> <CENTER> <form name="myForm"><select name="myMenu" size="1"> <option value="180">時間制限は? </option> <option value="600">10分 </option> <option value="300">5分 </option> </select> <input type="button" value="GO!" onclick="myGo()">                            あと<input type="text" size="15" name="myFormSec"> です。</form> </CENTER> <form> <center><input type="button" value="閉じる" onclick="window.close()"> </center> </form> </body> </html> 上のものを実行させると、なぜかスピードが早くなってしまいます。 どうすればいいのでしょう。 お願いします。

  • javascript iframeについて

    iframeにてアンケート的な物を作成しています。 ページは13ページくらいです ボタンを押すと次のページに移動し、さらに親のテキストエリアに選択したボタンの文言が上から保存されていくようにしたいのですが ↓は子のiframe内ですが、どのようにしていいかわからなくて、、 <html> <head> <link href="./if.css" rel="stylesheet" type="text/css"> </head> しつもん1<br><br> <form name="test"> <input type="button" name="001" value="戸館"onClick="kakunin(1)";onClick="setChars('AAAA')")><br><br> <input type="button" name="002" value="集合住宅" onClick="kakunin(2)"> </form> <form name="myFORM"> <textarea name="myTEXT"rows="10"></textarea><br> <!-- ↓ ここから先はJavaScript!!! --!> <script type="Text/Javascript"> function setChars(text) { if (document.myFORM.myTEXT.value || "") { document.myFORM.myTEXT.value = document.myFORM.myTEXT.value + "\n" } document.myFORM.myTEXT.value = document.myFORM.myTEXT.value + text } function kakunin(btnNo){ if (btnNo == 1){ link = "戸館"; href = "EN002.html"; }else{ link = "集合住宅"; href = "EN002m.html"; } ret = confirm(link + "でよろしいですか?"); if (ret == true){ location.href = href; } } </script> </html> よろしくお願いいします。

  • javascriptのストップウオッチのコード

    javascript初級勉強中です。 以下のコードを実行すると(1)小数点第2の動きがおかしい。  (2)一度リセットボタンを押さないとタイマーが動かない。 という2点の不具合が出ます。   どうすれば解決するでしょうか? <!DOCTYPE HTML> <head> <meta charset="utf-8"> <title>ストップウォッチ</title> </head> <body> <h1>ストップウオッチ</h1> <div id="sec" style="font-size:128px">0.00</div> <input type="button" value="Start!" onclick="run();"> <input type="button" value="Stop!" onclick="stop();"> <input type="button" value="Reset!" onclick="reset();"> <script> var statTime, stopTime, running = false, timerId; function run() { if (running)return; running = true; if (stopTime) { startTime = startTime + (new Date()).getTime() - stopTime; } if (! startTime) { startTime = (new Date()).getTime(); } timer(); //タイマー処理回していく } function timer() { document.getElementById('sec').innerHTML = (((new Date()).getTime()- startTime)/1000). toFixed(2); timerId =setTimeout(function() { timer(); //このタイマー自身を回していく }, 100); } function stop() { if (!running) return false; running = false; clearTimeout(timerId); //timerIdを渡して止める stopTime = (new Date()).getTime(); } function reset() { if (running) return;   startTime = undefined; document.getElementById('sec').innerHTML = '0.00'; } </script> </body> </html>

  • クリック→テキストボックスに追加

    下記は、クリックすると、テキストボックスの文字が入れ代わります。こうでなく、「どれどれそれからどうした」と追加していくようにするにはどうしたらよいでしょうか? <A HREF="javascript:function voi(){};voi()" onClick="document.myform.bun.value='どれどれ'">どれどれ</A><BR> <A HREF="javascript:function voi(){};voi()" onClick="document.myform.bun.value='それから'">それから</A><BR> <A HREF="javascript:function voi(){};voi()" onClick="document.myform.bun.value='どうした'">どうした</A><BR> <FORM name="myform"> <INPUT TYPE="TEXT" NAME="bun" SIZE="50"> </form>

  • JavaScriptが参照する要素名が配列の場合は?

    下記に示すようなリンクをクリックすると入力欄に入力されるjavascriptを作っているのですが、inputのname属性が配列になっているとうまく参照してくれません。 フォームの生成や送信内容の処理が配列だと都合がよく、なんとかできないかと悩んでいます。html側の要素名を変えずにjavascriptに参照させる方法はないでしょうか。 うまくいく場合の抜粋 function f1(VALUE){ if(!document.MyForm.str1.value){ document.MyForm.str1.value = VALUE; } } <input name="str1" type="text" /> <a href="javascript:f1('単語');">単語</a> うまくいかない場合の抜粋 function f2(VALUE){ if(!document.MyForm.str[1].value){ document.MyForm.str[1].value = VALUE; } } <input name="str[1]" type="text" /> <a href="javascript:f2('単語');">単語</a>

  • クッキーの初歩的質問

    クッキーに下記のような内容を書き込む方法を教えて下さい。上から順にクリックしていったときに、alert(★)の部分を「1,2,3」という結果にしたいのですが。 <SCRIPT language=JavaScript> function memoryCookie(num){ expires = new Date() expires.setTime(expires.getTime() + 24*60*60*1000) document.cookie = "mydata=" + num + ";expires=" + expires.toGMTString() alert(★) } </SCRIPT> <form name="myform"> <INPUT TYPE="CHECKBOX" NAME="test" VALUE="1" onclick="memoryCookie(this.value)">1<BR> <INPUT TYPE="CHECKBOX" NAME="test" VALUE="2" onclick="memoryCookie(this.value)">2<BR> <INPUT TYPE="CHECKBOX" NAME="test" VALUE="3" onclick="memoryCookie(this.value)">3<BR>

  • 小数の足し算

    Javascriptで <SCRIPT language="JavaScript"><!-- function wa() { a = eval( document.myFORM.a.value ); b = eval( document.myFORM.b.value ); s = a + b; document.myFORM.kotae.value="答え " + s; } //--></SCRIPT> </HEAD> <BODY> <FORM name="myFORM"> A =<INPUT type="text" name="a" size="3">B =<INPUT type="text" name="b" size="3"><BR> <INPUT type="text" name="kotae"><INPUT type="button" value="=" onclick="wa()"> </FORM> </BODY> としたとき A=0.1 B=0.05とすると 答え 0.15000000000000002となるのはなぜですか?

  • javascriptで電卓を作成

    プログラミングをまったくやったことがない状態から、ドットインストールやテックアカデミーのHTML,CSS,Javascriptの入門動画をすべて見終わった段階ですので、 基本的な仕組みと関数やfor文、if文、while文、などについてくらいは理解しています。 今回、javascriptを使って電卓のシステムを組む、という課題があり、 ネットで検索してやってみてはいるのですが行き詰っています。 最初は以下のような形で作成をしていました。 <body> <form name="myform">  <table border="1"> <tr> <td colspan="4"> <input type="text" name="result" value="" id="result"> </td> </tr> <tr> <td><input type="button" value=" "onclick="calc(' ')" ></td> <td><input type="button" value="%"onclick="calc('%')"></td> <td colspan="2"> <input type="button" value="AC" onclick="calc('AC')"></td> </tr> <tr> <td><input type="button" value="7" onclick="calc('7')"></td> <td><input type="button" value="8" onclick="calc('8')"></td> <td><input type="button" value="9" onclick="calc('9')"></td> <td><input type="button" value="÷" onclick="calc('÷')"></td> </tr> <tr> <td><input type="button" value="4"onclick="calc('4')" ></td> <td><input type="button" value="5"onclick="calc('5')" ></td> <td><input type="button" value="6"onclick="calc('6')"></td> <td><input type="button" value="×" onclick="calc('×')"></td> </tr>   <tr> <td><input type="button" value="1" onclick="calc('1')" ></td> <td><input type="button" value="2" onclick="calc('2')"></td> <td><input type="button" value="3" onclick="calc('3')"></td> <td><input type="button" value="-" onclick="calc('-')"></td> </tr> <tr> <td><input type="button" value="0" onclick="calc('0')" ></td> <td><input type="button" value="+" onclick="calc('+')"></td> <td colspan="2"> <input type="button" value="=" onclick="calc('=')"></td> </tr> </form> <script> function calc(a) { if (a === "=") { document.myform.kekka.value = eval(document.myform.kekka.value); } else if (a === "AC") { document.myform.kekka.value = ""; } else { document.myform.kekka.value += a; } </script> </body> </html> ですが、onclickとevalを使わず、代わりに「addEventListner」を用いるよう指示されました。 「addEventListner」に関しては、検索してなんとかざっと理解したのですが、それ以前に、電卓の基本的な関数の組み方を理解していないため、いまいちどこから手をつけたらいいかわかりません。 いろんなサイトを見ているといろんなやり方がでてきますが、ope=+,やflag=0などの表記をよく見かけます。が、この意味もいまいちわかっていません。。 初心者すぎるので、何かアドバイスをいただけますと幸いです。 宜しくお願いいたします。 また、このような初心者が使いこなせるようになるために向いている動画や書籍、ページがありましたら教えていただけますと助かります。

  • JavaScriptで簡単な計算機を作りたいのですが…

    初めて質問させていただきます。タイトルどおり、以下の様なコードを組んだのですが答えが表示されません。なにぶんJavaScriptを勉強し始めて数日の初心者なもので、どこが悪いのか見当がつきません。レベルの低い質問で申し訳ないのですが、皆さんのお知恵をお貸しください。 <html> <head> <title>JAVAscript</title> <SCRIPT LANGUAGE="JavaScript"> <!-- function func(){ a=parseInt(document.masu.0.value); b=parseInt(document.masu.1.value); c=a+b; document.masu.2.value=c; //--> </SCRIPT> </head> <body> <form name="masu"> <input type="text" name="0" SIZE=10 onkeyup="chkNum(this)"> <input type="text" name="1" SIZE=10 onkeyup="chkNum(this)"> <input type="text" name="2" SIZE=10"onkeyup="chkNum(this)"> <input type="button" value="計算" onclick="func()"> </form> </body> </html>

専門家に質問してみよう