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

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

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

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

364閲覧

ブラウザでボタンを押すと変数を書き換えて、ほかの関数を動かしたい。

meJ15

総合スコア55

JavaScript

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2018/12/11 06:48

前提・実現したいこと

ブラウザのstartボタンを押すと変数speの値を1に変えて、ある関数を動かしたい
またブラウザのstopボタンを押すと変数speの値を0に変えて、ある関数の動きを止めたい。

このようなことを実現したいのですがどの書き方がまずいのかがわかりません。
どこを書き換えればよいのでしょうか?

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

if(spe == 1)で関数を動かしたいのだが、動かない。

該当のソースコード

一部のソースコードです。

html

1 <div class="contents margin"> 2 <button id="start" class="button">開始ボタン</button> 3 <button id="fin" class="button">終了ボタン</button> 4 </div> 5 6<script> 7 8//推測用の変数 9var spe = 0; 10//スタートボタン 11document.getElementById('start').addEventListener('click', function() { 12 spe = 1; 13 console.log(spe); 14}); 15 16//終了ボタン 17document.getElementById('fin').addEventListener('click', function() { 18 spe = 0; 19 console.log(spe); 20}); 21 22 23//3秒おきにarrを表示する関数 24if(spe == 1 ){ 25 $(function(){ 26 setInterval(function(){ 27 console.table(arr); 28 },3000); 29 }); 30} 31 32</script>

試したこと

スタートボタンを押すとconsole.log(spe);で1が表示され、終了ボタンを押すと0がコンソールに表示されることは確認しました。
しかしスタートボタンを押してspeが1になっているはずが、
arrがコンソールに表示されません

また最初から定義で
var spe = 1;とすると
arrがコンソールに3秒おきに表示されます。
が終了ボタンでspe =0 としても関数が回り続け3秒おきにarrが出力されてしまいます。

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

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

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

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

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

guest

回答2

0

ベストアンサー

処理的には

html

1<script> 2 3//推測用の変数 4var spe = 0; 5//3秒おきにarrを表示する関数 6if(spe == 1 ){ 7 $(function(){ 8 setInterval(function(){ 9 console.table(arr); 10 },3000); 11 }); 12} 13//スタートボタン 14document.getElementById('start').addEventListener('click', function() { 15 spe = 1; 16 console.log(spe); 17}); 18//終了ボタン 19document.getElementById('fin').addEventListener('click', function() { 20 spe = 0; 21 console.log(spe); 22}); 23</script>

と同じになります。当然ながらspe = 0;だとif(spe == 1 )に一致しないのでsetIntervalの処理はしません。

こんな感じにやればいいのではというサンプル載せておきます

html

1<html> 2<head> 3<meta charset="UTF-8"> 4</head> 5<body> 6 <div class="contents margin"> 7 <button id="start" class="button">開始ボタン</button> 8 <button id="fin" class="button">終了ボタン</button> 9 </div> 10<script> 11var id = 0; 12var arr = [0, 1, 2]; // とりあえず適当 13//スタートボタン 14document.getElementById('start').addEventListener('click', function() { 15 if(id <= 0) { 16 id = setInterval(function(){ 17 console.table(arr); 18 },3000); 19 } 20}); 21 22//終了ボタン 23document.getElementById('fin').addEventListener('click', function() { 24 clearInterval(id); 25 id = 0; 26}); 27 28</script> 29</body> 30</html>

投稿2018/12/11 06:58

rururu3

総合スコア5545

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

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

meJ15

2018/12/11 07:27

書き方がわからなかったのですが、解決できてよかったです。ありがとうございます
guest

0

そういう書き方では想定通り動きません。
イベントなどで定義されていない限り上から下に処理は流れていきます。
「変数を変更したタイミングでif文を・・・」というのは実現できたとして非常に冗長で効率の悪い処理になります。

単にstart , stop をしたいのなら
start時にsetInterval()の戻り値を変数に保管しておき、
stop時にclearInterval()すれば良いのでは?

投稿2018/12/11 06:54

m.ts10806

総合スコア80850

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問