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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Q&A

2回答

307閲覧

なしというラジオボタンと複数選択が可能なチェックボックスを混ぜて配置したい。チェックボックスがONの場合はラジオボタンをオフにする

spipinc.u

総合スコア0

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

0グッド

0クリップ

投稿2024/04/14 23:17

実現したいこと

〇なし □1 □2 □3
というようなフォームを作りたい
なしをチェックしたらチェックボックスをオフにし
チェックボックスがONの場合はなしのラジオボタンはオフにしたい

発生している問題・分からないこと

ラジオボタンとチェックボックスは混同できるか

該当のソースコード

〇なし □1 □2 □3 というようなフォームを作りたい

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

表示は出来たがオンオフの事ができない
現状ラジオボタンとチェックボックスがオンになる
それではラジオボタンの意味がない

補足

フォームを作っている

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

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

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

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

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

Lhankor_Mhy

2024/04/15 00:28

HTML では難しいと思いますので、JavaScript の使用をご検討されてはいかがですか?
spipinc.u

2024/04/15 23:36

どのように書けば実現できますか?プログラマーじゃないのでわからなくて教えていただきたいです
Lhankor_Mhy

2024/04/16 08:40 編集

すでに回答がついているようですね。 私が書いても同じようなコードになるかと思います。 ・yambejp さんのサンプルが動作しない、ということであれば、環境の問題かと思いますので、解決は難しいです。 ・yambejp さんのサンプルは動作するが、これを自分のコードに当てはめると動作しない、ということであれば現物のコードを見ないと言えることはないです。極端な話、0とoの打ち間違いとかが原因だとしてもこちらではわかりようがないので。
guest

回答2

0

相当姑息なことをすれば別ですが、この手の処理はjsでします。
また一つしかないラジオボタンは構造上好ましくないのですべてチェックボックスでよいかと

javascript

1<script> 2document.addEventListener('change',({target})=>{ 3 if(target.matches('[name="c[]"]')){ 4 if(target.value==''){ 5 document.querySelectorAll('[name="c[]"]:not([value=""])').forEach(x=>x.checked=false); 6 }else{ 7 document.querySelector('[name="c[]"][value=""]').checked=false; 8 } 9 } 10}); 11</script> 12<label><input type="checkbox" name="c[]" value="" checked>なし</label> 13<label><input type="checkbox" name="c[]" value="1">1</label> 14<label><input type="checkbox" name="c[]" value="2">2</label> 15<label><input type="checkbox" name="c[]" value="3">3</label>

ラジオボタンでなし

javascript

1<script> 2document.addEventListener('change',({target})=>{ 3 if(target.matches('[name="c[]"]')){ 4 document.querySelector('[name="r"]').checked=false; 5 } 6 if(target.matches('[name=r]')){ 7 document.querySelectorAll('[name="c[]"]:not([value=""])').forEach(x=>x.checked=false); 8 } 9}); 10</script> 11<label><input type="radio" name="r" value="">なし</label> 12<label><input type="checkbox" name="c[]" value="1">1</label> 13<label><input type="checkbox" name="c[]" value="2">2</label> 14<label><input type="checkbox" name="c[]" value="3">3</label>

投稿2024/04/15 00:26

編集2024/04/15 07:06
yambejp

総合スコア114878

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

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

spipinc.u

2024/04/15 07:02

[value=""]これどういういみですか? なしのcheckboxをradioにしたらどうなります?
yambejp

2024/04/15 07:07

>[value=""]これどういういみですか? valueの値が空というセレクターです >なしのcheckboxをradioにしたらどうなります? 同バージョンのソースを追記しておきました。 回答に書いた通り一つの要素しかないラジオボタンはUIとしてはかなり程度が低いものです。
spipinc.u

2024/04/15 07:34

回答ありがとうございます。試してみましたが解決できませんでした。 なしのラジオボタンを選択してもチェックボックスがオフになりません この場合どの辺りに原因がありそうでしょうか?
yambejp

2024/04/16 00:04

> なしのラジオボタンを選択してもチェックボックスがオフになりません そんなことはないと思いますが https://codepen.io/yambejp/pen/jORvqoZ なにか余計な処理をしているのでは?
spipinc.u

2024/04/16 00:32

回答ありがとうございます。試してみましたが解決できませんでした。 (試した結果の詳細を記載してください) この場合どの辺りに原因がありそうでしょうか?
yambejp

2024/04/16 00:41

提示したcodepenは試されましたか? 「想定とどう動作が違う」のでしょうか? 私の環境ではPCでもスマホでも命題のとおりとなるようですが?
guest

0

方針:普通のチェックボックス+一括操作がしたい?

そもそもの話、やりたいことは

  • 1~n の、それぞれon/offできる普通のチェックボックスが複数必要
  • それらを一括で操作するUIが欲しい
    • よくある操作として、「全て選択する」「全て選択を外す」など

…であるように見えます。

もしそうなのであれば、一括操作は通常のボタン要素などのclick,tapといった操作イベントのみを持つUIで実装すべきであり、
ラジオボタンのように操作イベントだけでなく選択状態を持つようなUIは不向きです。

1~n がどのような選択状態であろうと、一括操作ボタンそのものon/offの状態を見せる必要はありません。
それこそ全部offの状態でも「全て選択を外す」をクリックできてよいです(特に何も変化しないだけ)。

この場合の実装方法

  • 「全て選択する」ボタンをクリック → 1~n 全部チェックonにする
  • 「全て選択を外す」ボタンをクリック → 1~n 全部チェックoffにする

という処理を記述するだけで、1~n チェックボックスを操作した時にボタンをどうこうする…という処理は一切考慮しなくてよくなります。

ついでに

ラジオボタンは一般的に「同じname属性を持つradio同士をグループとし、グループ内で1つだけ選択可能」つまり「複数の候補から1つのみ選択させるためのUI」であり、
「ラジオボタンが1つだけ置いてある」というのは一般的な用法でなく、ユーザを混乱させるおそれがあります。

一般的なボタンではない実装方針を選ぶと、ユーザの混乱を招き、さらに開発者は本来不要なボタンの状態を扱う処理を実装するハメに…という誰も得しない悲しいことになります

方針:普通のチェックボックス+さらに全体の状態管理も必要?

もしも万が一、上記ではなく

  • 1~n の、それぞれon/offできる普通のチェックボックスが複数必要
  • さらに、「なし」という特別な全体の状態管理が必要
    • 「1~n全てのチェックボックスがoffかつ、なしを表すUIがon」と
      「1~n全てのチェックボックスがoffかつ、なしを表すUIがoff」が別の意味を持つ

…であるならば、それは一連のデータ自体があまり一般的ではない複雑な構造となるため、もっと全体を工夫した別のUIにする必要があるでしょう。


※どのようなUIを用いるにせよ、すでに他のコメントで言われている通りjavascriptは必要となります

投稿2024/04/15 18:04

pecmm

総合スコア406

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問