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

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

詳細はこちら
イベントハンドラ

マウスのクリックなどの特定の事象(イベント)が発生した時に実行される処理のことをイベントハンドラと呼びます。

JavaScript

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

Q&A

解決済

1回答

1460閲覧

クリックイベント 要素の表示、非表示の切り替えをしたい

rei78087487

総合スコア12

イベントハンドラ

マウスのクリックなどの特定の事象(イベント)が発生した時に実行される処理のことをイベントハンドラと呼びます。

JavaScript

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

0グッド

0クリップ

投稿2021/03/29 07:52

流れ

1、ダブルクリック 要素(テキストエリア)を3つ作成
2、テキストエリア右クリック メニュー表示
3、メニュー 要素の選択をクリック
4、すべてのテキストエリアの左にチェックボックスが表示される

解決したいこと

上記の4番につきまして、
1度押すとチェックボックスが表れて、
2度押すとチェックボックスが(削除)される様にしたい。

toggleボタンの様にしようと思いましたが、createelmentを使用している為にそれができません。
毎回押す度にチェックボックス等が作成されてしまいます。
なのでテキストエリア以外の要素を、毎回作成したものを削除する形になると思います(div, input type=checkbox, input type=textNumber)
何か良い方法がありましたら是非ご教示ください。

宜しくお願い致します。

ソースコード:
https://codepen.io/mio-rei/pen/BapzePg

一部抜粋;

JavaScript

1document.addEventListener('dblclick',(e)=>{ 2 e.preventDefault(); 3 if(!e.target.closest('.nodoubleclick')){ 4 const textArea = document.createElement('textarea'); 5 document.querySelector('body').appendChild(textArea); 6 7 8 document.querySelector('.elm').addEventListener('click',() => { 9 10 const diClass = document.createElement('div'); 11 diClass.classList.add('di-class'); 12 13 14 const textNumber = document.createElement('input'); 15 textNumber.setAttribute('type', 'number'); 16 textNumber.classList.add('text-number'); 17 18 const ipClass = document.createElement('input'); 19 ipClass.setAttribute('type','checkbox'); 20 ipClass.classList.add('ip-class'); 21 22 document.querySelector('body').appendChild(diClass); 23 diClass.style.backgroundColor = 'yellow'; 24 diClass.style.display = 'inline-block'; 25 diClass.appendChild(textNumber); 26 diClass.appendChild(ipClass); 27 diClass.appendChild(textArea); 28 textNumber.style.display = 'none'; 29 30 31 const qa = document.querySelectorAll('.ip-class'); 32 let sizeUp = document.getElementById('sizeup'); 33 let sizeNum = document.getElementById('sizenum'); 34 35 sizeUp.onclick = () => { 36 for (const test of qa) { 37 if(test.checked == true) { 38 sizeNum.value = Number(sizeNum.value) + 1; 39 test.nextElementSibling.style.fontSize = sizeNum.value + 'px'; 40 } 41 } 42 } 43 });

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

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

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

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

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

guest

回答1

0

ベストアンサー

チェックボックスが存在するかどうか確認して、存在すればそれを削除、存在しなければチェックボックスを追加する、という処理にすればいいでしょう。

自分がするなら、下記のような設計にします。
ダブルクリックでテキストボックスを追加するときに、チェックボックスも追加する(ただし、CSSで display: none で非表示にしておく)。
メニュー 要素の選択をクリックでは、.classList.toggle メソッドでクラスを追加/削除を切り替える。このクラスは display: block を設定しておく。

投稿2021/03/29 08:15

hatena19

総合スコア34073

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問