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

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

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

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

HTML

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

Q&A

解決済

4回答

1415閲覧

[JavaScript]3つのボタンをクリックされたらOKアラートを鳴らしたい

kanan_py

総合スコア7

JavaScript

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

HTML

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

0グッド

0クリップ

投稿2020/11/04 05:48

タイトルの通り、3つのボタンを設置し、3つすべてクリックされたらOKというアラートを鳴るようにしたいです。
そのために以下のコードを実行しましたが、アラートが鳴りません何が原因なのでしょうか?
よろしくお願いします。

HTML

1<input type="button" name="sbtn3" id="stop_btn3"/> 2<input type="button" name="sbtn2" id="stop_btn2"/> 3<input type="button" name="sbtn1" id="stop_btn1"/>

JavaScript

1var bool_btn1 = false; 2var bool_btn2 = false; 3var bool_btn3 = false; 4 5function check_tf(){ 6 if(change_true1 == true && change_true2 == true && change_true3 == true){ 7 //リセットのためにfalseを代入 8 change_true1 = false; 9 change_true2 = false; 10 change_true3 = false; 11 alert("OK"); 12 } 13} 14 15function change_true1(){ 16 bool_btn1 = true; 17 check_tf(); 18} 19function change_true2(){ 20 bool_btn2 = true; 21 check_tf(); 22} 23function change_true3(){ 24 bool_btn3 = true; 25 check_tf(); 26} 27 28window.onload = function(){ 29 document.form1.sbtn1.onclick=change_true1; 30 document.form1.sbtn2.onclick=change_true2; 31 document.form1.sbtn3.onclick=change_true3; 32}; 33

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

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

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

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

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

guest

回答4

0

例えばこんな感じでクラスとカスタムデータを利用します

投稿2020/11/04 07:21

編集2020/11/04 07:21
yambejp

総合スコア116724

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

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

yambejp

2020/11/04 07:22

<script> window.addEventListener('DOMContentLoaded', ()=>{ const btns=document.querySelectorAll('.stop_btn'); btns.forEach(x=>{ x.addEventListener('click',()=>{ x.dataset["click"]=1; if([...btns].filter(x=>x.dataset["click"]).length==btns.length){ alert(1); } }); }); }); </script> <input type="button" name="sbtn3" class="stop_btn"> <input type="button" name="sbtn2" class="stop_btn"> <input type="button" name="sbtn1" class="stop_btn">
guest

0

何が原因なのでしょうか?

変数名、関数名を区別できていないのが原因です。

ご質問の例だとイベントリスナを onclick 属性に代入するなどして、「似た名称の変数、関数の宣言を減らす」という対策があります。

javascript

1var bool_btn1 = false; 2var bool_btn2 = false; 3var bool_btn3 = false; 4 5function check_tf(){ 6 if(bool_btn1 == true && bool_btn2 == true && bool_btn3 == true){ 7 //リセットのためにfalseを代入 8 //change_btn1 = false; 9 bool_btn1 = false; 10 //change_btn2 = false; 11 bool_btn2 = false; 12 //change_btn3 = false; 13 bool_btn3 = false; 14 alert("OK"); 15 } 16} 17 18window.onload = function(){ 19 document.form1.sbtn1.onclick = function (){ 20 bool_btn1 = true; 21 check_tf(); 22 }; 23 document.form1.sbtn2.onclick = function (){ 24 bool_btn2 = true; 25 check_tf(); 26 }; 27 document.form1.sbtn3.onclick = function (){ 28 bool_btn3 = true; 29 check_tf(); 30 }; 31 32};

<button> の イベントリスナを要素に直接定義する方法を発展させて
data-stat 属性にクリックされたかどうかを記憶、判別するアプローチが以下の例

ここでも、名称を工夫しています。

javascript

1window.addEventListener("DOMContentLoaded", () => { 2 3 const 4 buttons = document.querySelectorAll('[id^="stop_btn"]'), 5 DATA_NAME = "stat", 6 checkAll = () => [...buttons].every( btn => btn.dataset[DATA_NAME]==="true" ), 7 resetAll = () => [...buttons].forEach( btn => { delete btn.dataset[DATA_NAME] }) 8 ; 9 10 [...buttons].forEach( btn => { 11 //btn.addEventListener("click", function(evt){ 12 // evt.target.dataset[DATA_NAME]="true"; 13 btn.addEventListener("click", () => { 14 btn.dataset[DATA_NAME]="true"; 15 if( checkAll() ) { 16 alert("OK"); 17 resetAll(); 18 } 19 }); 20 }); 21 22});

投稿2020/11/04 06:43

編集2020/11/04 06:47
AkitoshiManabe

総合スコア5434

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

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

0

ベストアンサー

変数名にすべきところが関数名になってます。

js

1var bool_btn1 = false; 2var bool_btn2 = false; 3var bool_btn3 = false; 4 5function check_tf(){ 6 if(bool_btn1 == true && bool_btn2 == true && bool_btn3 == true){ 7 //リセットのためにfalseを代入 8 bool_btn1 = false; 9 bool_btn2 = false; 10 bool_btn3 = false; 11 alert("OK"); 12 } 13} 14 15function change_true1(){ 16 bool_btn1 = true; 17 check_tf(); 18} 19function change_true2(){ 20 bool_btn2 = true; 21 check_tf(); 22} 23function change_true3(){ 24 bool_btn3 = true; 25 check_tf(); 26} 27 28window.onload = function(){ 29 document.form1.sbtn1.onclick=change_true1; 30 document.form1.sbtn2.onclick=change_true2; 31 document.form1.sbtn3.onclick=change_true3; 32};

投稿2020/11/04 05:58

hatena19

総合スコア34075

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

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

kanan_py

2020/11/04 08:49

ご指摘の通り、変数がごっちゃになってしまっていました。 ありがとうございました
guest

0

変数が「bool_btn」と「change_true」でごっちゃになっているからでは?

javascript

1if(change_true1 == true && change_true2 == true && change_true3 == true){

ここは「bool_btn」かと

投稿2020/11/04 05:52

sousuke

総合スコア3830

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問