質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

1156閲覧

JavaScriptのルーレットの課題のリセットボタンについて

M__K

総合スコア1

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2020/08/22 11:46

前提・実現したいこと

ルーレットの課題を作成中です

発生している問題・エラーメッセージ

リセットボタンを押すと一回目は消えるのですが、次にスタートを押しても反応しない状況になります。 Stopは反応しています。

該当のソースコード

<! doctype> <html lang="ja"> <head> <meta charset="UTF-8"> <title>ルーレット</title> <script src="https://code.jquery.com/jquery-3.5.0.min.js" integrity="sha256-xNzN2a4ltkB44Mc/Jz3pT4iU1cmeR0FkXs4pru/JxaQ=" crossorigin="anonymous"></script> <link rel="stylesheet" href="Roulette.css"> <style> .colorBlue { background-color:blue; } .colorred { background-color:red; } </style> <script>// let start_flag=false; let interval_id=0; let math=0; let count=0; function start(){ if(start_flag===false){ interval_id=setInterval(random,100); start_flag=true; } } function random(){ $('td').eq(math).removeClass('colorBlue'); math=Math.floor(Math.random()*16); while($('td').eq(math).hasClass('colorred')){ math=Math.floor(Math.random()*16); } $('td').eq(math).addClass('colorBlue'); console.log(math); } function stop(){ clearInterval(interval_id); $('td').eq(math).removeClass('colorBlue'); $('td').eq(math).addClass('colorred'); count++; if(count>=16){ start_flag=true; }else{ start_flag=false; } } function reset(){ console.log("reset"); clearInterval(interval_id); count=16;//残りマス $('td').removeClass("colorBlue").removeClass("colorred"); } $(function(){ $('#start').click(start); $('#stop').click(stop); $('#reset').click(reset); } ) </script> </head> <body> <table class="box"> <tr> <td>1</td> <td>2</td> <td>3</td> <td>4</td> </tr> <tr> <td>5</td> <td>6</td> <td>7</td> <td>8</td> </tr> <tr> <td>9</td> <td>10</td> <td>11</td> <td>12</td> </tr> <tr> <td>13</td> <td>14</td> <td>15</td> <td>16</td> </tr> </table> <div id='button'> <button id='start'>スタート</button> <button id='stop'>ストップ</button> <button id='reset'>リセット</button> </div> </body> </html>

試したこと

もう一度Functionを入れるなどを試しましたが、うまくいきませんでした。。。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

reset関数内で、countに16を代入しているので、リセットを押した後にスタート→ストップを押すと、count変数は17になるのでif(count>=16)の条件を満たしstart_flgtrueになります。

そのあとstart_flgを変更する手段がないため、次にスタートを押した際に動作しないというわけです。

count変数の初期値は0でありますから、reset関数内でcountに0を代入するのが正しいかと思われます。

それでもなお、一度でもルーレットが全て埋まった状態になると(count変数が16以上になると)その後のスタートボタンを押しても動作しなくなってしまうので、stop関数も修正する必要があるでしょう。

投稿2020/08/22 12:07

編集2020/08/22 12:13
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

M__K

2020/08/22 12:32

早々にお返事いただきありがとうございます!頂いたアドバイスのもと修正したら、うまくいきました!ありがとうございます。
M__K

2020/08/22 12:32

早々にお返事いただきありがとうございます!頂いたアドバイスのもと修正したら、うまくいきました!ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問