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

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

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

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

HTML

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

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

3回答

687閲覧

チェックボックスにチェックがついたとき、特定のチェックボックスのチェックを外したい

seisei

総合スコア19

JavaScript

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

HTML

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

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2021/07/10 06:07

編集2021/07/10 06:28

現在ハンバーガメニューと検索メニューをCSSのチェックボックスを使用して、実装しています。
ただ現状、ハンバーガメニューのtriggerをクリックし、開いた後に検索メニューを開くと、ハンバーガメニューは開いたままの状態です。
なので、ハンバーガメニューにチェックがついたときはsearchメニューは閉じ、searchメニューにチェックがついたときには、ハンバーガメニューを閉じたいのですが、どのようにしたらいいのでしょうか?
JSはバニラ.jsを使用していますので、jquaryなしで書きたいです。

jsでチェックを外すメソッドなどがわかれば、changeイベント使用していけそうな気がしてるのですが、なかなか
見つからず、、

html

1<input type="checkbox" id="burger-toggle" class="c-burger-toggle"> 2<label for="burger-toggle" class="c-burger"> 3 ハンバーガーtrigger 4 </label> 5<div class="c-burger-contents"> 6ハンバーガーコンテンツ 7</div> 8 9<input type="checkbox" id="search-toggle" class="c-search-toggle"> 10<label for="search-toggle" class="c-search"> 11 検索trigger 12 </label> 13<div class="c-search-contents"> 14検索コンテンツ 15</div>

scss

1.c-burger-contents{ 2 opacity: 0; 3 visibility: hidden; 4 transition:all .1s; 5} 6 .c-burger-toggle:checked ~ .c-burger-contents{ 7 visibility:visible; 8 opacity: 1; 9 transition:opacity .2s; 10} 11 12.c-search-contents{ 13 opacity: 0; 14 visibility: hidden; 15 transition:all .1s; 16} 17 .c-search-toggle:checked ~ .c-search-contents{ 18 visibility:visible; 19 opacity: 1; 20 transition:opacity .2s; 21}

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

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

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

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

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

itagagaki

2021/07/10 06:12

ちょっと質問の意味がよくわからないのですが、えーと、まずハンバーガーメニューというのはどこですか?質問のコードにはチェックボックスが2つあるだけですよね。
m.ts10806

2021/07/10 06:15

>JSはバニラ.jsを使用していますので、jquaryなしで書きたいです。 そもそも現状でそのバニラ.jsのコードすら提示されてないというのは回答者を混乱させます。
seisei

2021/07/10 06:17 編集

あ、一応すごく簡略化したものが上記のソースで、ハンバーガーtriggerをチェックしたときにハンバーガーコンテンツが開く、検索triggerをチェックしたときに検索コンテンツが開くっていう状態です。 ただこのままだと、ハンバーガーtriggerを開いた状態で検索triggerを開くとハンバーガーtriggerも開いて、検索triggerも開いた状態になるので、どちらか片方を開いたら、その他のtriggerのチェックマークを外したい感じです。
guest

回答3

0

ラジオボタンを使うのはどうですか?

HTML

1<input type="radio" name="toggle" id="burger-toggle" class="c-burger-toggle"> 2 3... 4 5<input type="radio" name="toggle" id="search-toggle" class="c-search-toggle">

コメントを受けて追記

ラジオボタンだと一回チェックするとチェックを外せない

それであれば、JavaScript を使うしかないと思うので、普通にラベルのクリックイベントを拾って、全部のチェックボックスを外すのがいいでしょう。

EventTarget.addEventListener() - Web API | MDN
Document.querySelectorAll() - Web API | MDN
NodeList.prototype.forEach() - Web API | MDN

コードを追記

一応、コードを書いておきます。

js

1const target = document; // ここで範囲を決める 2const labelElements = target.querySelectorAll('label'); 3 4labelElements.forEach(el => el.addEventListener('click', e => 5 labelElements.forEach(el => target.getElementById(el.htmlFor).checked = false) 6));

投稿2021/07/10 06:18

編集2021/07/10 07:11
Lhankor_Mhy

総合スコア36115

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

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

seisei

2021/07/10 06:21

ご回答ありがとうございます。 その方法も考えたのですが、ラジオボタンだと一回チェックするとチェックを外せないので難しいですね。。
Lhankor_Mhy

2021/07/10 06:23

チェックを外す動作も必要なのですね。 問題を把握しました。 ご質問にも追記しておいた方がいいかもですね。
Lhankor_Mhy

2021/07/10 06:40

回答に追記しました。
guest

0

ベストアンサー

Lhankor_Mhyさんの回答に乗っかる形になりますが、ラジオボタンを使った上で、JavaScriptで、チェックされているボタンが押された時にはチェックを解除するという手もあると思います。

<input type="radio" name="toggle" id="burger-toggle" class="c-burger-toggle" onclick="selectMenu(this,1);"> <label for="burger-toggle" class="c-burger"> ハンバーガーtrigger </label> <div class="c-burger-contents"> ハンバーガーコンテンツ </div> <input type="radio" name="toggle" id="search-toggle" class="c-search-toggle" onclick="selectMenu(this,2);"> <label for="search-toggle" class="c-search"> 検索trigger </label> <div class="c-search-contents"> 検索コンテンツ </div> <script> var checkedNo = 0; function selectMenu(elem, n) { if (n == checkedNo) { elem.checked = false; checkedNo = 0; } else { checkedNo = n; } } </script>

投稿2021/07/10 06:49

itagagaki

総合スコア8402

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

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

0

たくさんのご回答ありがとうございました。
回答を参考に下記のソースで解決することができました。

js

1export const useRadioDeselection = ()=> { 2 let remove = ""; 3 const targets = document.querySelectorAll('[data-radio-trigger]'); 4 targets.forEach((target)=>{ 5 target.addEventListener('click', function (e) { 6 const targetElement = e.target.getAttribute("data-radio-trigger"); 7 if(remove == targetElement) { 8 target.checked = false; 9 remove = 0; 10 } else { 11 remove = targetElement; 12 } 13 }); 14 }); 15 16} 17

投稿2021/07/10 09:36

seisei

総合スコア19

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問