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

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

新規登録して質問してみよう
ただいま回答率
85.48%
ラジオボタン

ラジオボタンはフォームに使われる要素のひとつであり、ユーザに限られた選択肢からひとつの答えを選んでもらうというものです。

JavaScript

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

Q&A

解決済

7回答

7338閲覧

javascriptでradioボタンのラベルを取得したい(値は取得できています)

se_ariga

総合スコア11

ラジオボタン

ラジオボタンはフォームに使われる要素のひとつであり、ユーザに限られた選択肢からひとつの答えを選んでもらうというものです。

JavaScript

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

0グッド

0クリップ

投稿2018/02/07 02:03

編集2018/02/07 02:34

前提・実現したいこと

javascriptでradioボタンのラベルを取得したいです。
valueは取得できているのですが、ラベルの取得方法がわからず困っています。

該当のソースコード(valueの取得までできているものです)

javascript

1function (){ 2 var rs = ""; 3 var elements = document.getElementsByName( "sex" ) ; 4 for ( var rs="", i=elements.length; i--; ) { 5 if ( elements[i].checked ) { 6 var rs = elements[i].value; 7 break ; 8 } 9 } 10 return rs; 11}

質問にございました、<label>が欲しいのかinnertextが欲しいのかが表記されておらず、大変申し訳ございませんでした。
取得したいのはlabelの中身のテキストになります。
以下にhtmlのソースを追記いたします。
お手数おかけしますが、よろしくお願いいたします。

html

1<dd class="radio display-sex" style="display: block;"> 2 <input type="radio" name="sex" value="0" id="not_specified"><label for="not_specified">指定しない</label> 3 <input type="radio" name="sex" value="1" id="boy"><label for="boy">男の子</label> 4 <input type="radio" name="sex" value="2" id="girl" checked="checked"><label for="girl">女の子</label> 5</dd>

どんな追記をしたらラベルが取得できるようになるのか、皆様のお力をお貸しいただけると幸いです。
よろしくお願いいたします。

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

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

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

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

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

coco_bauer

2018/02/07 02:15

「radioボタンのラベルを取得したい」とのことですが、対象として考えているHTMLの例を質問に追加してもらえませんか? 「ラベルを取得」と「LABELタグ」は関係ありますか?
m.ts10806

2018/02/07 02:40

javascriptのコードもこれだけではエラーになります。なるべく現状を再現したものにしてください。
se_ariga

2018/02/07 02:45

javascriptのコードなのですが、グーグルタグマネージャーのカスタムjavascriptの記述欄にて記述しているのでまんま現状のものとなります。エラーの出ないように改変いただけると助かります。。
guest

回答7

0

ラベルというのがlabel要素だとすれば、for属性か先祖を探せばいいので。

JavaScript

1function getLabel(element) { 2 var label = null; 3 var id = element.id; 4 if (id !== '') { 5 label = document.querySelector('label[for="' + id + '"]'); 6 } 7 8 if (!label) { 9 label = element.closest('label'); 10 } 11 12 return label ? label.textContent : ''; 13}

aria-labelなどは知りません。

投稿2018/02/07 02:42

x_x

総合スコア13749

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

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

yambejp

2018/02/07 03:05

closestはいいですね
guest

0

IEとEdgeはサポートしていませんが、HTMLInputElementにはlabelsプロパティがあり、関連付けられた<label>をこのプロパティで取得することが可能です。

js

1not_specified.labels[0].textContent = 'hoge'; 2boy.labels[0].textContent = 'fuga'; 3girl.labels[0].textContent = 'piyo';

投稿2018/02/07 03:09

編集2018/02/08 12:49
turbgraphics200

総合スコア4267

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

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

guest

0

labelの使い方は2通りあるのでたとえばこんな感じ

javascript

1document.addEventListener('change',function(e){ 2 var t=e.target; 3 if(t.nodeName=="INPUT" && t.type=="radio"){ 4 if( 5 t.id && (l=document.querySelector('[for='+t.id+']')) || 6 ((l=t.parentNode).nodeName=="LABEL") 7 ){ 8 console.log(l.textContent); 9 } 10 } 11});

HTML

1<input type="radio" name="x" id="r1" value="1"><label for="r1">hoge1</label> 2<input type="radio" name="x" id="r2" value="2"><label for="r2">hoge2</label> 3<input type="radio" name="x" id="r3" value="3"><label for="r3">hoge3</label> 4<hr> 5<label><input type="radio" name="y" value="1">fuga1</label> 6<label><input type="radio" name="y" value="2">fuga2</label> 7<label><input type="radio" name="y" value="3">fuga3</label> 8

投稿2018/02/07 02:37

yambejp

総合スコア114769

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

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

0

ベストアンサー

<input type="radio" name="sex" value="0" id="not_specified"><label for="not_specified">指定しない</label>

inputタグの後ろに対象となるlabelタグが必ず記述されている、というルールであれば、以下の書き方でも拾えますね。

elements[i].nextSibling.innerText

投稿2018/02/07 03:34

tkturbo

総合スコア5572

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

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

se_ariga

2018/02/07 04:12

私自身あまりjavascriptの知識がないので、解答いただいたものを理解するのに時間のかからないtkturbo様の解答をベストアンサーとさせていただきました。 無事ラベルを表示することができましたことをここに報告いたします、ありがとうございました。
guest

0

call使ったやり方もありますね。
ただ、もしかしたらIE動かないかも・・・。

javascript

1var elements = document.getElementsByName( "sex" ); 2var labels = {}; 3var str = ""; 4 5var labelTag = document.getElementsByTagName("label"); 6 7for (var i = 0; i < labelTag.length; i++) { 8 labels[labelTag.item(i).htmlFor] = labelTag.item(i).innerHTML; 9} 10 11var getValueStr = function(){ 12 str = labels[this.id]; 13 console.log(str); 14}; 15 16elements.forEach(function(val, index){ 17 val.onchange = getValueStr; 18 19 if (val.checked) { 20 getValueStr.call(val); 21 } 22});

投稿2018/02/07 03:31

miyabi_takatsuk

総合スコア9528

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

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

0

radioとselectを勘違いしていたのでこの回答は無視してください。

HTML

1<select> 2 <option value="aaaaa">あああああ</option> 3</select>

これの「あああああ」が欲しいということですよね?

JavaScript

1var label = elements[i].innerText;

これが「あああああ」にあたる部分かと思います。

投稿2018/02/07 02:20

編集2018/02/07 02:22
masaya_ohashi

総合スコア9206

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

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

0

該当のHTMLコードも、追記してください。
radioボタンと、label要素の構造関係によって、取得するためのスクリプトも変わってきます。

投稿2018/02/07 02:20

miyabi_takatsuk

総合スコア9528

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問