🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
JavaScript

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

Q&A

解決済

1回答

596閲覧

JS 入力とアニメーションが同時にできない

andy23

総合スコア3

JavaScript

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

0グッド

0クリップ

投稿2021/02/22 01:21

編集2021/02/22 02:11

前提・実現したいこと

勉強の為にiPhoneの電卓に似せれるように作っています。
一通り作り終えて、「ボタンを押したら少し光るアニメーション」を作成したら、
電卓機能が働かなくなりました。

アニメーションを入れるまで電卓機能は問題なく使えていました。
何故なのか理由がわからないので、
教えていただきたいです。

プログラミングの勉強し初めて2ヶ月弱で初めて作っているコードで、
見づらいと思いますが、よろしくお願いします。

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

アニメーションのコードを入れるとボタン入力がされなくなる。

該当のソースコード

HTML

1<div> 2 <input type="text" class="disply" id="disply" value= "0" max="999999999" min="-999999999"> 3 </div> 4 <div id="btn"> 5 <div id="first"> <!--%は未設定--> 6 <input type="button" value="AC" id="AC" class="number" onclick=AC()> 7 <input type="button" value="→" id="modori" class="number" onclick=modori()> 8 <input type="button" value="%" id="percent" class="number" onclick=percent()> 9 <input type="button" value="÷" id="waru" class="number" onclick=Mat(14)> 10 </div> 11 <div id="ue"> <!--7~9--> 12 <input type="button" value="7" id="num_7" class="number" onclick=clicBtn(value)> 13 <input type="button" value="8" id="num_8" class="number" onclick=clicBtn(value)> 14 <input type="button" value="9" id="num_9" class="number" onclick=clicBtn(value)> 15 <input type="button" value="×" id="kakeru" class="number" onclick=Mat(13)> 16 </div> 17 <div id="naka"> <!--4~6--> 18 <input type="button" value="4" id="num_4" class="number" onclick=clicBtn(value)> 19 <input type="button" value="5" id="num_5" class="number" onclick=clicBtn(value)> 20 <input type="button" value="6" id="num_6" class="number" onclick=clicBtn(value)> 21 <input type="button" value="−" id="hiku" class="number" onclick=Mat(12)> 22 </div> 23 <div id="sita"> <!--1~3--> 24 <input type="button" value="1" id="num_1" class="number" onclick=clicBtn(value)> 25 <input type="button" value="2" id="num_2" class="number" onclick=clicBtn(value)> 26 <input type="button" value="3" id="num_3" class="number" onclick=clicBtn(value)> 27 <input type="button" value="+" id="tasu" class="number" onclick=Mat(11) > 28 </div> 29 <div id="zero"> <!--0~00--> 30 <input type="button" value="0" id="num_0" class="number" onclick=clicBtn(value)> 31 <input type="button" value="00" id="num_00" class="number" onclick=clic00(value)> 32 <input type="button" value="." id="Decimal" class="number" onclick=clicBtn(value) > 33 <input type="button" value="=" id="result" class="number" onclick=result()> 34 </div>

CSS

1.fade{ /*押している時のみアニメーションが発動*/ 2 animation: fadein; 3 animation-duration:0.7s; 4 5} 6@keyframes fadein { 7 from { 8 opacity: 1; 9 background-color: rgb(214, 214, 214); 10 } 11 to { 12 opacity: 1; 13 } 14}

JavaScript

1 var dis = document.getElementById("disply") //表示中の値. 2 parseFloat(dis.value); 3 var a = 0; //一旦入れる前者の数値 4 var v = 0; //次の文字が入った時に入力が消える仕組み作り 5 var math //演算子の振り分け 6 7//押したボタンの数値を入れる 8function clicBtn(num){ 9 Rem(); //演算式が押されていないか確認 10 if(dis.value == 0){ 11 dis.value = "";} 12 dis.value += num; 13 maxmin(dis.value); //最大最小値を確認 14 } 15//押したら光るアニメーションの処理 16const btn = document.querySelectorAll('#btn input'); 17 for (var i = 0; i < btn.length; i++ ){ //全部のnumber要素に下記を付与 18 btn[i].onclick = function() { //押したらfadeinが付属 19 this.classList.add('fade'); 20 this.addEventListener('animationend', function() { 21 this.classList.remove('fade'); 22 } 23 )} 24 }

試したこと

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

コンソールでのエラーは出ていません。
イメージ説明

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

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

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

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

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

m.ts10806

2021/02/22 01:34

エラーの確認はされましたか? ブラウザ、デベロッパーツールのコンソール
andy23

2021/02/22 01:50

コンソールでのエラーは出ていないです。 一応補足情報に画像追加しました。
m.ts10806

2021/02/22 01:52

それは「動かなくなる」操作をしたときもですか?
andy23

2021/02/22 02:10

伝え方が悪かっです。すみません。 動かなくなると言うより、「押したら光るアニメーション」はずっと機能しているが、 「押したらテキストエリアに数字が表示される」機能が働かなくなります。 アニメーションのコードをなくすと「押したらテキストエリアに数字が表示される」は機能します。 なので、どこを押しても動かなくなるというわけではないです。
guest

回答1

0

ベストアンサー

btn[i].onclick = function() ...
にてclickイベントハンドラを上書きしているのが原因かと思います。
addEventListenerで追加すれば上手くいくかもしれません。

js

1//押したら光るアニメーションの処理 2const btn = document.querySelectorAll('#btn input'); 3for (var i = 0; i < btn.length; i++ ){ //全部のnumber要素に下記を付与 4 btn[i].addEventListener("click", function() { //押したらfadeinが付属 5 this.classList.add('fade'); 6 this.addEventListener('animationend', function() { 7 this.classList.remove('fade'); 8 }); 9 }); 10}

投稿2021/02/22 02:34

plasticgrammer

総合スコア629

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

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

andy23

2021/02/22 02:48

上手くいきました!! イベントハンドラとイベントリスナーについて勉強します。 ありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問