HTML のフォーム要素(input / select / textarea 等)は name 属性でグループ化されます。ラジオボタンやチェックボックスなど、同じ name を持つ複数の要素をまとめて取得するには getElementsByName や querySelector の属性セレクタを使います。
この記事でわかること
・getElementsByName の基本構文と戻り値(NodeList)
・querySelector(‘[name=”xxx”]’) との比較
・form.elements[“name”] でフォーム要素にアクセスする方法
・ラジオボタンの選択値を取得する方法
・チェックボックスの選択値を配列で取得する方法
・FormData でフォーム全体の値を一括取得する方法
・getElementsByName の基本構文と戻り値(NodeList)
・querySelector(‘[name=”xxx”]’) との比較
・form.elements[“name”] でフォーム要素にアクセスする方法
・ラジオボタンの選択値を取得する方法
・チェックボックスの選択値を配列で取得する方法
・FormData でフォーム全体の値を一括取得する方法
getElementsByName の基本
HTML(サンプルフォーム)
<form id="surveyForm"> <p>好きな色は?</p> <label><input type="radio" name="color" value="red"> 赤</label> <label><input type="radio" name="color" value="blue"> 青</label> <label><input type="radio" name="color" value="green"> 緑</label> <p>好きな食べ物は?(複数選択可)</p> <label><input type="checkbox" name="food" value="sushi"> 寿司</label> <label><input type="checkbox" name="food" value="ramen"> ラーメン</label> <label><input type="checkbox" name="food" value="curry"> カレー</label> <button type="submit">送信</button> </form>
JavaScript(getElementsByName)
// name="color" の全要素を取得
const colorInputs = document.getElementsByName("color");
console.log(colorInputs.length); // 3
console.log(colorInputs[0].value); // "red"
// NodeList が返る(ライブコレクション)
colorInputs.forEach(input => {
console.log(input.value); // "red", "blue", "green"
});
| 項目 | 内容 |
|---|---|
| 引数 | name 属性の値(文字列) |
| 戻り値 | NodeList(ライブ) |
| 対象 | name 属性を持つ全 HTML 要素 |
| 大文字小文字 | 区別する |
getElementsByName は document でのみ使える
element.getElementsByName() は使えません。document.getElementsByName() のみです。特定のフォーム内から検索したい場合は form.elements["name"] または querySelector を使ってください。querySelector で name 属性を指定する
JavaScript(属性セレクタで name を指定)
// 最初の name="color" 要素
const first = document.querySelector('[name="color"]');
// name="color" の全要素
const all = document.querySelectorAll('[name="color"]');
// 特定フォーム内の name="color"
const form = document.querySelector("#surveyForm");
const colors = form.querySelectorAll('[name="color"]');
// チェック済みのラジオボタン
const checked = document.querySelector('input[name="color"]:checked');
console.log(checked?.value); // 選択された値(未選択なら undefined)
| 方法 | セレクタ | スコープ | 推奨 |
|---|---|---|---|
| getElementsByName(“name”) | name のみ | document 全体のみ | シンプルだがスコープ指定不可 |
| querySelectorAll(‘[name=”name”]’) | CSS 属性セレクタ | 任意の親要素 | 推奨(柔軟) |
| form.elements[“name”] | form 内のみ | form 要素のみ | フォーム操作に最適 |
querySelector の方が柔軟で推奨
querySelector なら
querySelector なら
:checked 疑似クラスと組み合わせて「選択済みのラジオボタン」を 1 行で取得できます。getElementsByName では取得後に自分でループして checked を探す必要があります。form.elements[“name”] でフォーム要素にアクセス
JavaScript(form.elements)
const form = document.querySelector("#surveyForm");
// name="color" の RadioNodeList を取得
const colors = form.elements["color"];
console.log(colors.value); // 選択されたラジオボタンの value!!
// name="food" の NodeList を取得
const foods = form.elements["food"];
console.log(foods.length); // 3
// 全フォーム要素をループ
for (const el of form.elements) {
console.log(el.name, el.value, el.type);
}
form.elements[“name”].value でラジオボタンの選択値が直接取れる
ラジオボタンの場合、
ラジオボタンの場合、
form.elements["name"] は RadioNodeList を返し、その .value プロパティで選択されている値を直接取得できます。ループして checked を探す必要がありません。これが最もシンプルな方法です。ラジオボタンの選択値を取得する
JavaScript(ラジオボタン: 3 つの方法)
// 方法(1): form.elements(最もシンプル)
const form = document.querySelector("#surveyForm");
const selectedColor = form.elements["color"].value;
console.log(selectedColor); // "blue"(選択されている値)
// 方法(2): querySelector + :checked
const checked = document.querySelector('input[name="color"]:checked');
console.log(checked?.value); // "blue" or undefined
// 方法(3): getElementsByName + ループ
const radios = document.getElementsByName("color");
let value = null;
radios.forEach(radio => {
if (radio.checked) value = radio.value;
});
console.log(value); // "blue"
| 方法 | コードの短さ | 未選択時 |
|---|---|---|
| form.elements[“name”].value | 最短 | 空文字 “” |
| querySelector(“:checked”)?.value | 短い | undefined |
| getElementsByName + ループ | 長い | null(自分で初期値設定) |
チェックボックスの選択値を配列で取得する
JavaScript(チェックボックス: 選択値の配列)
// 方法(1): querySelectorAll + :checked(推奨)
const checkedFoods = [...document.querySelectorAll('input[name="food"]:checked')]
.map(cb => cb.value);
console.log(checkedFoods); // ["sushi", "curry"]
// 方法(2): getElementsByName + filter
const foods = document.getElementsByName("food");
const selected = [...foods].filter(cb => cb.checked).map(cb => cb.value);
console.log(selected); // ["sushi", "curry"]
// 方法(3): FormData(後述)
const formData = new FormData(document.querySelector("#surveyForm"));
const foodValues = formData.getAll("food");
console.log(foodValues); // ["sushi", "curry"]
FormData でフォーム全体の値を一括取得する
JavaScript(FormData: 最もモダン)
const form = document.querySelector("#surveyForm");
form.addEventListener("submit", (e) => {
e.preventDefault();
const formData = new FormData(form);
// 個別の値を取得
console.log(formData.get("color")); // "blue"(ラジオの選択値)
console.log(formData.getAll("food")); // ["sushi", "curry"](チェックボックス)
// 全キーと値をループ
for (const [key, value] of formData) {
console.log(`${key}: ${value}`);
}
// オブジェクトに変換
const data = Object.fromEntries(formData);
console.log(data); // { color: "blue", food: "curry" }
// ※ 同名キーは最後の値だけになる。チェックボックスは getAll() を使う
// JSON として API に送信
fetch("/api/survey", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(data),
});
});
FormData は現代のフォーム処理の標準
name 属性を持つ全フォーム要素の値を1 行で取得できます。ラジオボタン・チェックボックス・select・textarea・file input など全種類に対応し、getElementsByName でループする必要がありません。
name 属性を持つ全フォーム要素の値を1 行で取得できます。ラジオボタン・チェックボックス・select・textarea・file input など全種類に対応し、getElementsByName でループする必要がありません。
Object.fromEntries(formData) は同名キーを上書きする
チェックボックスのように同じ name が複数ある場合、
チェックボックスのように同じ name が複数ある場合、
Object.fromEntries は最後の値だけが残ります。複数値を取得するには formData.getAll("name") を使ってください。実務パターン集
パターン(1): ラジオボタンの変更を検知
JavaScript
document.querySelectorAll('input[name="plan"]').forEach(radio => {
radio.addEventListener("change", (e) => {
console.log("選択されたプラン:", e.target.value);
updatePrice(e.target.value);
});
});
パターン(2): チェックボックスの選択数を制限
JavaScript
const MAX = 3;
document.querySelectorAll('input[name="tags"]').forEach(cb => {
cb.addEventListener("change", () => {
const checked = document.querySelectorAll('input[name="tags"]:checked');
if (checked.length > MAX) {
cb.checked = false;
alert(`最大 ${MAX} 個まで選択できます`);
}
});
});
パターン(3): select 要素の値を name で取得
JavaScript
// <select name="prefecture">...</select>
const select = document.querySelector('select[name="prefecture"]');
console.log(select.value); // 選択されている option の value
// 変更時
select.addEventListener("change", () => {
console.log("選択:", select.value);
});
パターン(4): 動的に name 属性を持つ要素を追加
JavaScript
// name 属性で動的入力フィールドを追加
function addField(index) {
const input = document.createElement("input");
input.type = "text";
input.name = `item_${index}`;
input.placeholder = `商品 ${index}`;
document.querySelector("#dynamic-fields").appendChild(input);
}
よくある質問
QgetElementsByName と querySelectorAll はどちらを使うべきですか?
AquerySelectorAll を推奨します。
querySelectorAll('[name="xxx"]') なら :checked 等の疑似クラスと組み合わせられ、親要素をスコープにした検索も可能です。getElementsByName は document 全体のみで、スコープ指定ができません。Qラジオボタンの値を最もシンプルに取得する方法は?
A
form.elements["name"].value が最短です。1 行で選択されている値が取れます。form 要素の参照がない場合は document.querySelector('input[name="xxx"]:checked')?.value を使ってください。Qname 属性と id 属性の違いは?
A
id はページ内で一意であるべき識別子です。name はフォームの送信時にキーとして使われ、ラジオボタンやチェックボックスでは同じ name のグループとして動作します。ラジオボタンは同じ name のグループ内で 1 つだけ選択可能になります。QgetElementsByName が返す NodeList はライブですか?
Aはい。getElementsByName が返す NodeList はライブです。DOM の変更がリアルタイムに反映されます。一方、querySelectorAll は静的な NodeList を返します。
QFormData で file input の値も取得できますか?
Aはい。
formData.get("file_input_name") で File オブジェクトが取得できます。fetch の body に FormData をそのまま渡せばマルチパートフォームとして送信されます。Qname 属性のない input の値は FormData に含まれますか?
A含まれません。FormData は name 属性を持つ要素のみを対象とします。フォーム送信時にサーバーに送られるデータと同じルールです。name 属性を付け忘れている input がないか確認してください。
まとめ
name 属性による要素取得の要点をまとめます。
| やりたいこと | 推奨方法 |
|---|---|
| name 属性の全要素を取得 | querySelectorAll(‘[name=”xxx”]’) |
| ラジオボタンの選択値 | form.elements[“name”].value |
| チェック済みラジオボタン | querySelector(‘input[name=”xxx”]:checked’)?.value |
| チェック済みチェックボックスの値配列 | […querySelectorAll(‘[name=”xxx”]:checked’)].map(cb => cb.value) |
| フォーム全体の値を一括取得 | new FormData(form) |
| 同名キーの全値 | formData.getAll(“name”) |
ID での取得は「ID で要素を取得する方法」、querySelector の詳細は「querySelector / querySelectorAll の使い方」も併せて参照してください。