Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

JavaScript

JavaScriptでラジオボタンで選択された値を取得する方法(動画解説付き)

投稿日:2020年8月5日 更新日:

<目次>
(1) JavaScriptでラジオボタンで選択された値を取得する方法
(2) パターン1:formタグ内部のラジオボタン
 (2-1) 単一選択肢
 (2-2) 複数選択肢
(3) パターン2:formタグ外部のラジオボタン
 (3-1) 単一選択肢
 (3-2) 複数選択肢
(4) まとめ
 (4-1) 要点まとめ
 (4-2) ご参考:オブジェクト型確認

(1) JavaScriptでラジオボタンで選択された値を取得する方法

今回はJSPで作った画面の「ラジオボタンに入力された値をJavaScriptで取得する方法」について、2つの表記方法で紹介します。また、サンプルプログラムと操作動画も併せて紹介します。
注意点として、同じラジオボタンでも「<form>タグの中にあるかどうか?」や「選択肢が1つか複数か?」によって操作の仕方が若干異なってきます。これは上記の違いによって、ラジオボタンのオブジェクトの型が異なるためです。
まずはご自身が値を取得したいラジオボタンがどの種類かを確認して、それにあった章節を見て頂けたらと思います。

(参考)

    出来上がり
オブジェクト型
length
プロパティ
使用可否
選択状態
取得のインデックス指定要否
(forループで回す必要あるか?)
節番号
<form>
タグ内
単一選択肢 HTMLInputElement × 不要(○)
例:radio.checked
⇒(2-1)
  複数選択肢 RadioNodeList 不要(○)
例:radio.checked
⇒(2-2)
<form>
タグ外
単一選択肢 NodeList 要(×)
例:radio[i].checked
⇒(3-1)
  複数選択肢 NodeList 要(×)
例:radio[i].checked
⇒(3-2)

目次にもどる

(2) パターン1:formタグ内部のラジオボタン

(2-1) 単一選択肢

(2-1-1) 構文

(構文)

//ラジオボタンの作成(単一選択肢)
<form id="[form id]">
 <input id="[radio id]" type="radio" name="[radio name]" value="[radio value]">[Lable Text]</input>
</form>

//##①ラジオボタン要素の取得
//## Formオブジェクトからラジオボタン名(radio name)を指定して取得
radio = document.getElementById("[form id]")."[radio name]";
//##②ラジオボタン選択状態の取得
//## このケースは戻り値の型が「HTMLInputElement」のため、forループは不要。
//## 但し、単にradio.valueのみではボタンが未選択でもvalueを出力してしまうため、
//## if(radio.checked){ }で判断した上でradio.valueの値を拾う。
if(radio.checked){
	//##③ラジオボタン選択値の取得
	//## インデックス値の指定は不要
	[代入先] = radio.value;
}

目次にもどる

(2-1-2) サンプルプログラム・操作例

(JSPサンプルコード)
上記の構文を組み込んだJSPのサンプルプログラムです。

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <script type='text/javascript' language='javascript'>
                function onButtonClick(){
                        elem1 = document.getElementById("output1");     elem1.innerHTML = "";
                        //①ラジオボタン要素の取得
                        radio = document.getElementById("temp_form").choose_player;

                        //②ラジオボタン選択状態の取得
                        if(radio.checked){
                                //③ラジオボタン選択値の取得
                                // →結果を<div id="output1">要素に出力
                                elem1.innerHTML += "③ :「if(radio.checked){radio.value}」の値: " + radio.value + "<br />";
                        }
                        //参考:if(radio.checked)なしの場合
                        // →結果を<div id="output1">要素に出力
                        elem1.innerHTML += "参考:「radio.value」の値(ラジオ未選択でも出力される→): " + radio.value + " ";
                }
        </script>
</head>
<body>
<form id="temp_form">
        <b>Radio Button</b><br >
        <input id="rainbow" type="radio" name="choose_player" value="Rainbow">Rainbow Planet</input><br /><br />
        <b>Selected Status</b><br >
        <div id="output1"></div>
<input type="button" value="選択状態確認" onclick="onButtonClick();" /><br /><br />
</form>
</body>
</html>

(動画211)
上記プログラムの画面を実際に操作した映像です。
ポイントとして、上記PG「参考」の記述だと未選択の状態でもvalueが出力されてしまうため、if文でcheckedの確認が必要である事が分かります。

目次にもどる

(2-2) 複数選択肢

(2-2-1) 構文

(構文)

//##ラジオボタン(複数選択肢)
<form id="[form id]">
 <input id="[radio id1]" type="radio" name="[radio name]" value="[radio value1]">[Lable Text1]</input>
 <input id="[radio id2]" type="radio" name="[radio name]" value="[radio value2]">[Lable Text2]</input>
 <input id="[radio id3]" type="radio" name="[radio name]" value="[radio value3]">[Lable Text3]</input>
</form>

//##①ラジオボタン要素の取得
//## Formオブジェクトからラジオボタン名(radio name)を指定して取得
radio = document.getElementById("[form id]")."[radio name]";

//##②選択値の取得
//## 選択状態をcheckedプロパティでチェックしなくても自動で識別できる
//## 要素配列のindexを指定せずともアクセスできる
[代入先] = radio.value;

目次にもどる

(2-2-2) サンプルプログラム・操作例

(JSPサンプルコード)
上記の構文を組み込んだJSPのサンプルプログラムです。

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <script type='text/javascript' language='javascript'>
                function onButtonClick(){
                        elem1 = document.getElementById("output1");     elem1.innerHTML = "";
                        //##①ラジオボタン要素の取得
                        radio = document.getElementById("temp_form").choose_color;

                        //##③ラジオボタン選択値の取得
                        //##  選択状態をチェックしなくても自動で識別できる
                        //## →結果を<div id="output1">要素に出力
                        elem1.innerHTML += "③ :「radio.value」の値: " + radio.value + " ";

                        //##参考:上記のような省略形でも取れるが、forやifで要素をループしてアクセスもできる
                        for(i=0; i<radio.length; i++){
                                if(radio[i].checked){
                                        //##③ラジオボタン選択値の取得
                                        //## →結果を<div id="output1">要素に出力
                                        elem1.innerHTML += "参考:「if(radio.checked){radio[i].value}」の値: " + radio[i].value + "<br />";
                                }
                        }
                }
        </script>
</head>
<body>
<form id="temp_form">
        <b>Radio Button</b><br >
        <input id="red" type="radio" name="choose_color" value="Red">Red</input>
        <input id="blue" type="radio" name="choose_color" value="Blue">Blue</input>
        <input id="green" type="radio" name="choose_color" value="Green">Green</input><br /><br />
        <b>Selected Status</b><br >
        <div id="output1"></div>
</form>
<input type="button" value="選択状態確認" onclick="onButtonClick();" /><br /><br />
</body>
</html>

(動画221)
上記プログラムの画面を実際に操作した映像です。

目次にもどる

(3) パターン2:formタグ外部のラジオボタン

(3-1) 単一選択肢

(3-1-1) 構文

(構文)

//##ラジオボタン(複数選択肢)
<input id="[radio id]" type="radio" name="[radio name]" value="[radio value]">[Lable Text]</input>

//##①要素の取得
//## getElementsByNameメソッドでラジオボタン名(radio name)を指定して取得
radio = document.getElementsByName("[radio name]");

//##②選択状態の取得
//## このケースは、戻り値の型が「NodeList」となるため、forループ要(インデックス指定要)。
//## また選択状態を取得するためにはif(radio[i].checked){ }の条件判定が必要になります。
for(i=0; i<radio.length; i++){
 if(radio[i].checked){
  //##③選択値の取得
  [代入先] = radio[i].value;
 }
}

目次にもどる

(3-1-2) サンプルプログラム・操作例

(JSPサンプルコード)
上記の構文を組み込んだJSPのサンプルプログラムです。

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <script type='text/javascript' language='javascript'>
                function onButtonClick(){
                        elem1 = document.getElementById("output1");     elem1.innerHTML = "";
                        //①ラジオボタン要素の取得
                        radio = document.getElementsByName("choose_player");
                        //②ラジオボタン選択状態の取得
                        //if(radio[i].checked)のみならずfor文で要素をループさせる必要あり。
                        for(i=0; i<radio.length; i++){
                                if(radio[i].checked){
                                        //③ラジオボタン選択値の取得
                                        // →結果を<div id="output1">要素に出力
                                        elem1.innerHTML += "③ :「if(radio.checked){radio.value}」の値: " + radio.value + "<br />";
                                }
                        }
                        //参考:if(radio.checked)なしの場合
                        // →結果を<div id="output1">要素に出力
                        elem1.innerHTML += "参考:「radio.value」の値(index指定なしでは出力されない): " + radio.value + " ";
                }
        </script>
</head>
<body>
        <b>Radio Button</b><br >
        <input id="rainbow" type="radio" name="choose_player" value="Rainbow">Rainbow Planet</input><br /><br />
        <b>Selected Status</b><br >
        <div id="output1"></div>
<input type="button" value="Copy" onclick="onButtonClick();" /><br /><br />
</body>
</html>

(動画311)
上記プログラムの画面を実際に操作した映像です。「参考」で出力しているradio.valueのみでは取得ができず、undefinedになってしまっている事が分かります。

目次にもどる

(3-2) 複数選択肢

(3-2-1) 構文

(構文)
上記の構文を組み込んだJSPのサンプルプログラムです。

//ラジオボタン(複数選択肢)
<input id="[radio id1]" type="radio" name="[radio name]" value="[radio value1]">[Lable Text1]</input>
<input id="[radio id2]" type="radio" name="[radio name]" value="[radio value2]">[Lable Text2]</input>
<input id="[radio id3]" type="radio" name="[radio name]" value="[radio value3]">[Lable Text3]</input>

//##①要素の取得
//## getElementsByNameメソッドでラジオボタン名(radio name)を指定して取得
radio = document.getElementsByName("[radio name]");

//##②選択状態の取得
//## このケースは、戻り値の型が「NodeList」となるため、forループ要(インデックス指定要)。
//## また選択状態を取得するためにはif(radio[i].checked){ }の条件判定が必要になります。
for(i=0; i<radio.length; i++){
 if(radio[i].checked){
  //##③選択値の取得
  [代入先] = radio[i].value;
 }
}

目次にもどる

(3-2-2) サンプルプログラム・操作例

(JSPサンプルコード)

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <script type='text/javascript' language='javascript'>
                function onButtonClick(){
                        elem1 = document.getElementById("output1");     elem1.innerHTML = "";
                        //①ラジオボタン要素の取得
                        radio = document.getElementsByName("choose_color");
                        //var toString = Object.prototype.toString;
                        //console.log("output type: "+toString.call(radio));
                        //②ラジオボタン選択状態の取得
                        //if(radio[i].checked)のみならずfor文で要素をループさせる必要あり。
                        for(i=0; i<radio.length; i++){
                                if(radio[i].checked){
                                        //③ラジオボタン選択値の取得
                                        // →結果を<div id="output1">要素に出力
                                        elem1.innerHTML += "③ :「if(radio.checked){radio[i].value}」の値: " + radio[i].value + "<br />";
                                }
                        }
                        //参考:if(radio.checked)なしの場合
                        // →結果を<div id="output1">要素に出力
                        elem1.innerHTML += "参考:「radio.value」の値(index指定なしでは出力されない): " + radio.value + " ";
                }
        </script>
</head>
<body>
        <b>Radio Button</b><br >
        <input id="red" type="radio" name="choose_color" value="Red">Red</input>
        <input id="blue" type="radio" name="choose_color" value="Blue">Blue</input>
        <input id="green" type="radio" name="choose_color" value="Green">Green</input><br /><br />
        <b>Selected Status</b><br >
        <div id="output1"></div>
<input type="button" value="選択状態確認" onclick="onButtonClick();" /><br /><br />
</body>
</html>

(動画321)
上記プログラムの画面を実際に操作した映像です。「参考」で出力しているradio.valueのみでは取得ができず、undefinedになってしまっている事が分かります。

目次にもどる

(4) まとめ

(4-1) 要点まとめ

・「RadioNodeList」と「HTMLInputElement」は共に[radioの要素].valueで選択状態を取得できる(但し、単一の「HTMLInputElement」は[radioの要素].checkedで確認をしないと、未選択でも値を拾ってしまう)
・「HTMLInputElement」にはlengthプロパティが無い(選択肢が1のため、forループ等で選択肢をループできない)
・NodeList型は要素のインデックスを指定しないと、選択状態が取得できない(例:radio.value=NG、radio[0].value=OK)
・<form>外だと[id]では正しく選択状態を取得できないため、getElementByIdではなくgetElementsByNameを使う必要あり。

(4-2) ご参考:オブジェクト型確認

ご参考に、冒頭の表で示したオブジェクトの型の確認(表のとおりになる事の確認)をした際のエビデンスを掲載します。

No 区分1 区分2 出来上がり
オブジェクト型
<form>
タグ内
単一選択肢 HTMLInputElement
  複数選択肢 RadioNodeList
<form>
タグ外
単一選択肢 NodeList
  複数選択肢 NodeList




目次にもどる

Adsense審査用広告コード


Adsense審査用広告コード


-JavaScript

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

JavaScriptのletとは?変数宣言で使われるletの意味やサンプルプログラム

<目次> (1) JavaScriptのletとは?変数宣言で使われるletの意味やサンプルプログラム  (1-1) letとは?  (1-2) letのサンプルプログラム  (1-3) 参考:スコー …

Ajaxでの繰り返し処理の順序性を保つ方法について

<目次> (1) Ajaxでの繰り返し処理の順序性を保つ方法について  (1-1) JavaScriptやAjaxの処理順序について  (1-2) Ajax処理順序制御②:同一処理ループ時の順序性保持 …

jQueryの$(document).ready()とは?意味や使い方をご紹介

<目次> (1) jQueryの$(document).ready()とは?意味や使い方をご紹介  (1-1) 「$(document).ready()」とは?  (1-2) サンプルプログラム  ( …

JavaScriptでformをPOSTリクエストでsubmitするプログラムの例

  <目次> (1) JavaScriptでformをPOSTリクエストでsubmitするプログラムの例  (1-1) 概要  (1-2) 構文  (1-3) サンプルプログラム  (1-4 …

JavaScriptでpopstateイベントが動かない?発動タイミングやサンプルプログラムをご紹介

  <目次> (1) JavaScriptでpopstateイベントが動かない?発動タイミングやサンプルプログラムをご紹介  (1-1) 概要  (1-2) 構文  (1-3) サンプルプロ …

  • English (United States)
  • 日本語
Top