• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ボタンを2回押さなければ・・・)

ボタンを2回押さなければ・・・

このQ&Aのポイント
  • 趣味でJavaScriptをしている者のためのフラッシュ暗算のコードについての質問です。
  • ボタンを2回押さなければ実行されない問題について教えてください。
  • 要望としては、ボタンを1回押すだけで実行できるようにしたいです。

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

  • ベストアンサー
回答No.3

やっぱり、まちがいはっけん!! いまの、じぶんのけいさんのうりょくは、これがげんかい!? ぜんかくくうはくは、はんかくに! もうみてないだろうなぁ~~~~~ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <title>TEST</title> <style type="text/css"> #no {  color:#f00;  font-size:300px;  padding: 0;  margin: 0;  width: 800px;  height: 350px;  text-align:center;  border: 2px #00f solid; } </style> <body> <div id="no"> ? </div> <p>  <input type="button" value="Start" onClick="Start()">  <input type="text" value="" id="kotae">  <input type="button" value="Check" onClick="Check()"> </p> <script type="text/javascript"> var intRandom = function ( min, max, len ) {  var a = new Array( len );  var r = [ ];  var s = max - ( min < 0 ? -min: min ) + 1;    while( len-- ) r.push( Math.floor(Math.random() * s - min) );  return r; } var Flash = function ( ) {  this.init.apply( this, arguments ); }; Flash.prototype.init = (function ( ) {  return function ( id, vtime, htime, ary ) {   this.target = document.getElementById( id );   this.vtime = 'number' == typeof vtime ? vtime: 700;   this.htime = 'number' == typeof htime ? htime: 100;   return this.ary = ary;  }; })(); Flash.prototype.stop = function ( ) {  clearTimeout( this.tmid );  return this.setString( 'Stop!!' ); }; Flash.prototype.start = (function ( ) {  return function ( ) {   this.setString( 'Start!!' );   this.max = this.ary.length;   this.mode = false;   this.tmid = null;   this.cnt = 0;   setTimeout( (function(that){ return function(){ that.loop() }})(this), 500);  }; })(); Flash.prototype.setString = (function ( ) {  return function ( str ) {   return this.target.firstChild.nodeValue = 'undefined' == typeof str ? '': str + '';  }; })(); Flash.prototype.loop = (function ( ) {  return function ( ) {   var t = '?';   if( this.max >= this.cnt ) {    t = ( this.mode = ! this.mode ) ? '': this.ary[ this.cnt++ ];    this.tmid = setTimeout( (function(that){ return function(){ that.loop() }})(this),     this.mode ? this.htime: this.vtime );   }   this.setString( t );  }; })(); Flash.prototype.getTotal = (function ( ) {  return function ( ) {   var t = 0, c = this.max, n;   while( c ) t += this.ary[ --c ];   return t;  }; })(); Flash.prototype.setData = (function ( ) {  return function ( ary ) {   return this.ary = ary;  }; })(); Flash.prototype.check = (function ( ) {  return function ( total ) {   return total == this.getTotal();  }; })(); var mondai = new Flash( 'no', 500, 100); function Start( ) {  document.getElementById( 'kotae' ).value = '';  mondai.setData( intRandom( 0, 10, 10) );  mondai.start( ); } function Check( ) {  var t = document.getElementById( 'kotae' );  t.value = mondai.check( t.value ) ? "正解": mondai.getTotal(); } </script>

noname#173931
質問者

お礼

お礼が遅れて申し訳ありません コードをオブジェクトで記述していただき、とても、参考になると思います。力不足で、プロパティなどについて、よくわからないところもありますが、ネットで調べてみようと思います。 貴重な時間を割いてのアドバイスありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

回答No.5

いか、しゅうせいしたやつ。 var intRandom = function ( min, max, len ) {  var a = new Array( len );  var r = [ ];  var s = max - min + 1;    while( len-- ) r.push( Math.floor(Math.random() * s + min ) );  return r; }

全文を見る
すると、全ての回答が全文表示されます。
回答No.4

さらにみすはっけん。 minがまいなすだと、だめだ~

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

たいまーにもじれつをわたすのは、やめよう~! ぼけぼうしとおもって、じぶんのためにかいてみた。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <title>TEST</title> <style type="text/css"> #no {  color:#f00;  font-size:300px;  padding: 0;  margin: 0;  width: 800px;  height: 350px;  text-align:center;  border: 2px #00f solid; } </style> <body> <div id="no"> ? </div> <p>  <input type="button" value="Start" onClick="Start()">  <input type="text" value="" id="kotae">  <input type="button" value="Check" onClick="Check()"> </p> <script type="text/javascript"> var intRandom = function ( min, max, len ) {  var a = new Array( len );  var r = [ ];  var s = max - ( min < 0 ? -min: min );    while( len-- ) r.push( Math.floor(Math.random() * s - min) );  return r; } var Flash = function ( ) {  this.init.apply( this, arguments ); }; Flash.prototype.init = (function ( ) {  return function ( id, vtime, htime, ary ) {   this.target = document.getElementById( id );   this.vtime = 'number' == typeof vtime ? vtime: 700;   this.htime = 'number' == typeof htime ? htime: 100;   return this.ary = ary;  }; })(); Flash.prototype.stop = function ( ) {  clearTimeout( this.tmid );  return this.setString( 'Stop!!' ); }; Flash.prototype.start = (function ( ) {  return function ( ) {   this.setString( 'Start!!' );   this.max = this.ary.length;   this.mode = false;   this.tmid = null;   this.cnt = 0;   setTimeout( (function(that){ return function(){ that.loop() }})(this), 500);  }; })(); Flash.prototype.setString = (function ( ) {  return function ( str ) {   return this.target.firstChild.nodeValue = str ? str + '': '';  }; })(); Flash.prototype.loop = (function ( ) {  return function ( ) {   var t = '?';   if( this.max >= this.cnt ) {    t = ( this.mode = ! this.mode ) ? '': this.ary[ this.cnt++ ];    this.tmid = setTimeout( (function(that){ return function(){ that.loop() }})(this),     this.mode ? this.htime: this.vtime );   }   this.setString( t );  }; })(); Flash.prototype.getTotal = (function ( ) {  return function ( ) {   var t = 0, c = this.max, n;   while( c ) t += this.ary[ --c ];   return t;  }; })(); Flash.prototype.setData = (function ( ) {  return function ( ary ) {   return this.ary = ary;  }; })(); Flash.prototype.check = (function ( ) {  return function ( total ) {   return total == this.getTotal();  }; })(); var mondai = new Flash( 'no', 500, 100); function Start( ) {  document.getElementById( 'kotae' ).value = '';  mondai.setData( intRandom( 0, 10, 5) );  mondai.start( ); } function Check( ) {  var t = document.getElementById( 'kotae' );  t.value = mondai.check( t.value ) ? "正解": mondai.getTotal(); } </script>

全文を見る
すると、全ての回答が全文表示されます。
  • OKbokuzyo
  • ベストアンサー率43% (130/296)
回答No.1

多分色々勘違いしてると思うんだなぁ。 > timerA.timeID = setTimeout( "hyouji()", 500 ); > timerA.timeID = setTimeout( "hihyouji()", 500 ); ここ。 これって「0.5秒後にhyouji関数が呼ばれて、さらに0.5秒後にhihyoji関数が呼ばれる」って思ってない? 正解は「0.5秒後にhyouji関数とhihyouzi関数が呼ばれる」(正確には0.5秒後にキューに登録される) hyouji関数が呼ばれて直後にhihyouzi関数が呼ばれるわけだから結果として何も動いていないように見えてるわけですな。 2回目にボタンを押すと、ちゃんと動いている(ように見える)のは 時間差でShutudai関数が呼ばれているから。 ちょっと目を凝らしてもらえば分かると思うけど、ファイルを開き直して実行し直すたびに 「おい!」と表示されている時間が短かったり、長かったりするはず。 あるいは何度もボタンを繰り返し押していれば、そのうちほぼ「おい!」としか表示されなくなるだろうね。 修正するなら単純に timerA.timeID = setTimeout( "hyouji()", 500 ); timerA.timeID = setTimeout( "hihyouji()", 1000 ); とすれば良いんだけど‥。 > timerA.timeID = null; これはいったい何をやりたいのだろう? タイマーをストップさせたいならclearTimeoutを使わないといけない。 あと、ボタンを押す度に新しくスレッドが作られるのは良くないので clearIntervalをちゃんと使おう。 それから余談だけどもjavascriptにおいてnewを使うのは極力避けた方が良い。 new処理は異常に遅いからね。 javascriptでオブジェクト指向がいまいち流行らないのは そのへんが理由なんですな。

noname#173931
質問者

お礼

お礼が遅れてしまってもうしわけありません setTimeout("hihyouji()", 1000)にしたら、うごいてくれました。 ところで、clearInterval を記述する場所がよくわからないので、よろしければおしえていただけないでしょうか とにかく、貴重な時間を割いてのアドバイス、ありがとうございました

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ラジオボタンの値を・・・・・

    <html> <head> <script language="javascript"> function osu(){ document.form1.text1.value=document.form1.radio1.value; } </script> </head> <body> <form name="form1"> <input type="radio" name="radio1" value="男" checked>男 <input type="radio" name="radio1" value="女">女 <input type="button" value="押す" onClick="osu()"> <input type="text" name="text1"> </form> </body> </html> ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー 上記のプログラムは、選択されたラジオボタンの値をテキストボックスに表示させるプログラムなんですが、何故かラジオボタンの値が表示されず、「undefined」というのが表示されます。 どうすれば、「男」または「女」という値を表示させることができますか? ちなみにこれは、「○○○.html」で保存します

  • ボタンを押したらテキストボックスの文字色をチェンジ

    ボタンをクリックしたらテキストボックスに入っている文字色を黒から赤に変えたいんですがどのようにしたらいいでしょうか? 一応、自分なりに作ってみたものです。エラーがでます。 保存ファイルの拡張子は「html」です。 ------------------------------------------------------- <html> <head> <script language="javascript"> function change(){ document.form1.text1.fgcolor="red"; } </script> </head> <body> <input type="text" value="文字色" name="text1"> <input type="button" value="押す" onClick="change()"> </body> </html> ----------------------------------------------------------

  • JavaScript テキストボックス キーイベント

    JavaScript テキストボックス キーイベント こんにちは。趣味でプログラミングをしている者です。 タイマーを使って計算ドリルを作ったのですが、 特定のキーコードで正解かどうか判定する関数を呼び出そうとしたのですが、 テキストボックスにこたえを入力して、キーを押すたびに 「キーン」というような音が鳴るのですが、 その音は、どのような仕組みで鳴るのでしょうか? また、音を鳴らさないようにする方法がありましたら、 教えていただけないでしょうか よろしくお願いします <html> <head> <script type="text/javascript"> function init() { document.attachEvent("onkeypress", KotaeAwase); } function KotaeAwase() { if( event.keyCode == 13) { var key = 1; var kotae = parseInt( document.Form1.kotae.value ); var Result = document.Form1.result; if( kotae == key ) Result.value = "せいかいです!"; else Result.value = "ちがいます"; } } </script> </head> <body onLoad="init();"> <form name="Form1"> <input type="text" name="kotae" size="20"> <br><br> <input type="text" name="result" size="20"> <br> </form> </body> </html>

  • JavascriptのtimerIDの意味

    いつもお世話になっております。 現在、Javascriptの勉強をしており、その過程でカウントダウンタイマーを作成しています。 テキスト通りにsetTimeout()メソッドなどを使用しているのですが、timerIDの意味が理解できず困っております。 タイマーを識別するID番号ということはなんとなく理解できるのですが、下記コードのelse if (timerID)やtimerID=0とは何を意味しているのでしょうか。 if文の条件がtimerIDとはどういうことなのか。 timerIDの値を0にする必要性は何なのか。 教えてください。 <doctype! html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>Javascript</title> <script type="text/javascript"> window.onload = init; function init(){ document.form1.start.onclick = start; document.form1.reset.onclick = stop; } var timerID; function start(){ count = parseInt(document.form1.time.value); if (count<=0){ count = 0; return; } else if (timerID){ count--; } document.form1.time.value=count; if (count==0){ clearTimeout(timerID); timerID = 0; alert("時間です"); return; } timerID = setTimeout("start()", 1000); } function stop(){ document.form1.time.value=0; if(timerID){ clearTimeout(timerID); timerID=0; } } </script> </head> <body> <h1>カウントダウンタイマー</h1> <form name="form1"> 時間<input name="time" type="text" size="3">秒<br> <input name="start" type="button" value="スタート"> <input name="reset" type="button" value="リセット"> </form> <script type="text/javascript"> </script> </body> </html>

  • formのボタンをsubmitしたときにアラート

    javascript で、formのボタンをsubmitしたときに アラートが出るようにしたいと思います。 下記のように作ってみましたが、うまく動きません。 どのようにすれば動くでしょうか? ご教示いただきたくお願いいたします。 <script type="text/javascript"> function(){ $('form1').submit(function(){ $.ajax({ type: 'POST', data: postData, url: 'buy.php', success: function(data){alert("購入できました");} error: function(){alert('購入できませんでした。再度お試しください');} }); return false; }); } </script> <form name="form1" id="form1" method="POST" name="form1" value="form1" action="buy.php"> <input type="hidden" name="id" value="100" /> <input type="hidden" name="name" value="高橋" /> <input type="submit" value="Save"> <form/>

  • ラジオボタンを押して計算結果を出した後、全てをnull値に戻すには?

    初心者ながらがんばっています。どうか宜しくお願いします。 <HTML> <head> <script language="JavaScript"> <!-- function calc(radio, form) {   form.OUT.value = form.IN.value * radio.value; } //--> </script> </head> というスクリプト内容で、 計算する数値:<input type=TEXT name="IN" size=10 value=0> <input type=RADIO name="MODE" value="3.14" onClick="calc(this,this.form)"> cm 計算結果:<input type=TEXT name="OUT" size=10 value=0 style="text-align:right"> cm このラジオボタンをクリアして、計算する数値と計算結果の場所をブランクにするには、どのように組めば良いのでしょう。onclickを使うことは解るのですが、どんなふうに組んでも、うまく動作しません。

  • 現在のカーソル行を知りたい。

    'KeyDown'の下記サンプルコードでfunction msgにきたときに 何番目のテキストボックスでKYyDownされたか知りたいのですが、 関数があればお教え下さい。 <html> <head> <script type="text/Javascript"> <!-- function msg(str) { alert("check"); } //--> </script> </head> <body onKeyDown="msg('KeyDown')"> key<br> <form name="myForm" method="POST" target="_self"> <input type="text" name="text1><BR> <input type="text" name="text1"><BR> <input type="text" name="text1"><br> <input type="submit" name="button1" value="button"> </form> </body> </html>

  • Enterキーでボタンが押下&新しいタブで開くには

    こちらで教えていただきながら、下記のようなhtml文にたどり着きました。 加えて以下のことをしたいと思っており、解説を読みながらいろいろ試していますがうまくいきません…。 (1)テキストボックスに文字を入力した後、Enterキーでボタンが押下されるようにしたい (2)結果の画面を新しいタブで表示したい (head部分に<base target="_blank">と記述してもでダメでした) 上記2つのことが出来るようでしたら、その方法を教えていただけないでしょうか。 どうぞよろしくお願いいたします。 -------------------------------------------- <html> <head> <script type="text/javascript"> <!-- function jump1(){ location.href="http://minkabu.jp/stock/" + document.getElementsByName("code1")[0].value; } function jump2(){ location.href="http://kabu-sokuhou.com/brand/item/code___" + document.getElementsByName("code2")[0].value; } //--> </script> <base target="main"> </head> <body> <form> <input name="code1" size="4" > <br><br> <input type="button" onclick="jump1()" value="サイト1へ"> </form> <form> <input type="hidden" name="code2" size="4"> <input type="button" onclick="jump2()" value="サイト2へ"> </form> </body> </html> -----------------------------------------------------

    • ベストアンサー
    • HTML
  • 初めて書いたけど、動かないw

    いろいろjsのサンプルとか見てて 作れそうと思って作ったんですが、動きません もしかしたらjs以前の問題かもしれませんが エラーではdocument.x1.x2がnullだとか・・ めちゃくちゃなものかもしれないですが、見てください おねがいします --------------------------- <html> <head> <script type="text/JavaScript"><!-- function keisan() { n1=document.x1.x2.value; n2=document.x1.x3.value; n1=eval(n1); n2=eval(n2); alert(n1+n2); } // --></script> </head> <body> <form neme="x1"> 計算します<br/> <input name="x2" type="text" value="1"> + <input name="x3" type="text" value="2"> <input type="button" value="=" onClick="keisan()"> </form> </body> </html>

  • disabledの点で。

    このソースを開いて、更新ボタンをクリックすると、 2の方のテキストボックスが半透明になりますが、それは半透明にしないようにすることは可能なのでしょうか。 お願いします。 <html> <head> <title></title> <script language="JavaScript"> <!-- function setTF(){ if(document.form1.text1.value=="") document.form1.text2.disabled = true; else document.form1.text2.disabled = false; } //--> </script> </head> <body> <form name="form1"> 1<INPUT type="text" name="text1" onChange="setTF()"> 2<INPUT type="text" name="text2" disabled> <INPUT type="submit" value="登録" onClick="return setTF()" name="submit"> </form> </body> </html>