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

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

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

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

JavaScript

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

Q&A

解決済

2回答

2054閲覧

JavaScriptのif文の条件をstyle.opacity===0.5にしたのですがif文中のreturn処理をしてくれません。

FreddyMarcury

総合スコア4

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

JavaScript

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

0グッド

0クリップ

投稿2020/06/10 10:42

以下の画像のようなstop,resetの三つのボタンがあるストップウォッチを作っています。しかし、startを三回押したらstopを三回押さないと止まってくれないといったように、同じボタンを連打することで問題が起きてしまいます。その問題を解決するために、opacity===0.5のときはreturnでそれ以降の処理を行わないようにといったif文を書くことで、opacity0.5のボタンは押せなくするという対策を試みたのですが、全く無意味で連打できてしまいます。なぜうまくいかないのでしょうか?ご教授お願いいたします。

JavaScript

1const start = document.getElementById('start'); 2 const stop = document.getElementById('stop'); 3 const reset = document.getElementById('reset'); 4 let startTime; 5 let timeoutId; 6 let elapsedTime = 0; 7 function countUp () { 8 const d = new Date(Date.now() - startTime + elapsedTime); 9 const m = String(d.getMinutes()).padStart(2,'0'); 10 const s = String(d.getSeconds()).padStart(2,'0'); 11 const ms = String(d.getMilliseconds()).padStart(3,'0'); 12 timer.textContent = `${m}:${s}:${ms}`; 13 timeoutId = setTimeout(countUp,10); 14 } 15 16 stop.style.opacity = 0.5; 17 reset.style.opacity = 0.5; 18 19 start.addEventListener('click',() => { 20 if(start.style.opacity === 0.5) { 21 return; 22 } 23 startTime = Date.now(); 24 countUp(); 25 start.style.opacity = 0.5; 26 stop.style.opacity = 1; 27 reset.style.opacity = 0.5; 28 }); 29 stop.addEventListener('click',() => { 30 if(stop.style.opacity === 0.5) { 31 return; 32 } 33 clearTimeout(timeoutId); 34 elapsedTime += Date.now() - startTime; 35 start.style.opacity = 1; 36 stop.style.opacity = 0.5; 37 reset.style.opacity = 1; 38 }); 39 reset.addEventListener('click',() => { 40 if(reset.style.opacity === 0.5) { 41 return; 42 } 43 timer.textContent ="00:00.000"; 44 elapsedTime = 0; 45 start.style.opacity = 1; 46 stop.style.opacity = 0.5; 47 reset.style.opacity = 0.5; 48 });

イメージ説明

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

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

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

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

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

guest

回答2

0

すでにベストアンサーは出ているので別案ですが、start.style.opacity = 0.5;を使用するよりもstart.disabled = true;を使用するほうが良いかと思います。
見た目はちゃんと「押せないボタン」に変わる上、ボタン要素がdisabledの間はクリックしてもclickイベントは起こらないのでifの条件分岐自体が不要となります。

投稿2020/06/10 11:03

編集2020/06/10 11:08
reosablo

総合スコア339

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

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

FreddyMarcury

2020/06/27 11:47

気づくのが遅れてしまい申し訳ございませんでした。ベストアンサー後なのにもかかわらず回答してくださりありがとうございます!確かこのボタンは<input type = button>を使ったわけではなく、paddingを使って見た目をボタン風にしただけでしたので、disabledが使えなかった気がします。もう記憶が少し薄れているのですが...そしてinputを使わずボタンを作ったのにも何か理由があったのですが、ちょっと思い出せないのですみません。なんにせよありがとうございます!
guest

0

ベストアンサー

element.style[property-name] は文字列になるからだと思います。
element.style.opacity === '0.5' で解決するか試してみてください。

parseFloat(element.style.opacity) === 0.5 の方がいいかも…。

投稿2020/06/10 10:49

編集2020/06/10 10:51
htsign

総合スコア870

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

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

FreddyMarcury

2020/06/10 10:57

できました!完全に盲点でした...本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問