JavaScript:チェックボックスでチェックした項目の値(配列)をjoinなどで結合させたい
解決済
回答 3
投稿
- 評価
- クリップ 1
- VIEW 11K+
前提・実現したいこと
いつもお世話になっております。
先日も類似する質問をさせて頂きましたが、その後の部分もうまくできなかったのでアドバイスいただけますでしょうか。
チェックボックスの値を取得して文字列を結合させて取り出したいのですが、下記のようにしてもうまくできませんでした。
理想としては、「111,222,333」という値になって欲しいのですが、どのようにしたら良かったでしょうか。
恐れ入りますが、ご教授頂ければ幸いです。
よろしくお願いいたします。
該当のソースコード
<script language="JavaScript">
function inq_checked(){
// [name="room_check"]の要素を全て取得
var elements = document.getElementsByName('room_check') ;
var test;
for(var i = 0 ; i < elements.length ; i ++){
if(elements[i].checked == true){
//test += elements[i].value;
test = elements.join(",");
}
}
alert(test);
}
</script>
<button type="button" onclick="javascript:inq_checked();">チェックした項目</button>
<input type="checkbox" name="room_check" value="111"></label>
<input type="checkbox" name="room_check" value="222"></label>
<input type="checkbox" name="room_check" value="333"></label>
test += elements[i].valueの場合
⇒undefined111222333
なぜ「undefined」が入るのかもわかりません。。。
test = elements.join(",")の場合何も表示されません。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+4
前回私が回答した内容のままで動きますが
あまり回答をみていませんか?
sample
※前回のまま
function inq_checked(){
var ret="";
var ele=document.getElementsByName('room_check');
for(var i=0;i<ele.length;i++){
if(ele[i].checked){
if(ret!=="") ret+=",";
ret+=ele[i].value;
}
};
alert(ret);
}
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+4
<!DOCTYPE HTML>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<form action="">
<p>
<label>
<input type="checkbox" name="chkbtn[]" value="111" />
</label>
</p>
<p>
<label>
<input type="checkbox" name="chkbtn[]" value="222" />
</label>
</p>
<p>
<label>
<input type="checkbox" name="chkbtn[]" value="333" />
</label>
</p>
<p>
<button type="button" id='chkbtn'>チェックした項目</button>
</p>
</form>
<script type="text/javascript">
var chkbtn = document.getElementById('chkbtn');
chkbtn.addEventListener('click', function () {
var checkedBtns = [];
var chkboxes = document.getElementsByName('chkbtn[]');
for (var i = 0; i < chkboxes.length; i++) {
if (chkboxes[i].checked) {
checkedBtns.push(chkboxes[i].value);
}
}
var res = checkedBtns.join(',');
alert(res);
});
</script>
</body>
</html>
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+1
すでに解決済みですが一応、別解として(IE8以前非対応)
var elms = document.querySelectorAll('input[name="room_check"]:checked');
var vals = [].map.call(elms, function(e){return e.value}).join(',');
ES2015対応だともちょっとシンプルに+ワンライナーに
var vals = [].map.call(document.querySelectorAll('input[name="room_check"]:checked'), e => e.value).join(',');
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.22%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2017/01/22 16:32
まさに前回いただいた内容そのままでした。。。
何度もお手数おかけいたしました。