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

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

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

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

HTML

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

CSS

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

Q&A

解決済

2回答

2755閲覧

nameが異なるradioボタンをcheckboxのように使いたい

MeB

総合スコア104

JavaScript

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

HTML

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

CSS

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

0グッド

0クリップ

投稿2018/09/07 00:44

前提・実現したいこと

nameが異なるradioボタンをcheckboxのように使いたいです。

該当のソースコード

html

1<div class="form-list"> 2 <p>年数</p> 3 <input type="radio" id="year01" name="year1" value="2年"><label for="year01">2年</label> 4 <input type="radio" id="year02" name="year2" value="3年"><label for="year02">3年</label> 5 <input type="radio" id="year03" name="year3" value="4年"><label for="year03">4年</label> 6</div>

現状は上記のような状態で、調べて見てもcssの記事ばかりで
参考になりそうなものが見つからなかったため質問させていただきました。

動きは通常のradioボタンのように別を押したら他の場所の選択が解除されるようにしたいです。
異なるnameにしている理由ですがphpの配列で下記のようなデータを持っていて、

php

1"year1"=>"2年", 2"year2"=>"3年", 3"year3"=>"-",

それぞれ分けて使いたいためです。
ご教示のほどよろしくお願いします。

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

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

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

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

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

guest

回答2

0

JavaScript

1document.addEventListener("DOMContentLoaded", evt => { 2 const yearRadios = Array.from(document.querySelectorAll("input[type=radio][name^=year]")); 3 yearRadios.forEach(radio => { 4 radio.addEventListener("change", evt => yearRadios.forEach(radio => radio.checked = radio.id === evt.target.id)); 5 }); 6});

投稿2018/09/07 01:11

編集2018/09/07 01:15
root_jp

総合スコア4666

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

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

root_jp

2018/09/07 02:23

JSFiddleで動かすなら、設定のLoad TypeをNo wrapにするか 以下のように一番外側のDOMContentLoadedの部分を削除してください。 const yearRadios = Array.from(document.querySelectorAll("input[type=radio][name^=year]")); yearRadios.forEach(radio => { radio.addEventListener("change", evt => yearRadios.forEach(radio => radio.checked = radio.id === evt.target.id)); });
root_jp

2018/09/07 02:25

jQueryを使うなら、タグにjQueryを書いた方が適した回答もらえると思いますよ。
guest

0

ベストアンサー

こうですかね?

javascript

1<script> 2window.addEventListener('DOMContentLoaded', function(e){ 3 [].forEach.call(document.querySelectorAll('.year'),function(x){ 4 x.addEventListener('change',function(e){ 5 [].forEach.call(document.querySelectorAll('.year'),function(y){ 6 y.checked=(y===x); 7 }); 8 }); 9 }); 10}); 11</script> 12<div class="form-list"> 13 <p>年数</p> 14 <label><input type="radio" name="year1" class="year" value="2年">2</label> 15 <label><input type="radio" name="year2" class="year" value="3年">3</label> 16 <label><input type="radio" name="year3" class="year" value="4年">4</label> 17</div>

checkboxのように消せる

javascript

1<script> 2window.addEventListener('DOMContentLoaded', function(e){ 3 [].forEach.call(document.querySelectorAll('[type=radio][name^=year]'),function(x){ 4 var flg=true; 5 x.addEventListener('focus',function(e){ 6 if(!x.checked) flg=false; 7 }); 8 x.addEventListener('click',function(e){ 9 if(x.checked && flg) x.checked=false; 10 flg=!flg; 11 }); 12 x.addEventListener('change',function(e){ 13 [].forEach.call(document.querySelectorAll('[type=radio][name^=year]:checked'),function(y){ 14 y.checked=(y===x); 15 }); 16 }); 17 }); 18}); 19</script> 20<div class="form-list"> 21 <p>年数</p> 22 <label><input type="radio" name="year1" value="2年">2</label> 23 <label><input type="radio" name="year2" value="3年">3</label> 24 <label><input type="radio" name="year3" value="4年">4</label> 25</div>

投稿2018/09/07 00:55

編集2018/09/07 07:49
yambejp

総合スコア114839

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

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

yambejp

2018/09/07 01:11

ちなみにcheckboxのようにの仕様に 「チェックされている要素をクリックするとチェックが消える」 を実装するかしないかで調整が必要
MeB

2018/09/07 01:40

ご回答ありがとうございます。 1つ目をクリックしていた場合 2つ目をクリックすると1つ目のチェックは外れる というのは不可能ということでしょうか?
yambejp

2018/09/07 01:53

いや、それは提示したソースで実現しています。 そうではなくチェックボックスは自分自身をつけたり消したりできます ラジオボタンは一度ついたら消すことができません
yambejp

2018/09/07 07:50

チェックボックスのような挙動をするバージョンを追記しておきました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問