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

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

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

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

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

Q&A

解決済

4回答

1601閲覧

jQueryでcheckboxの値を取得して変数に配列で格納したい

tepin712

総合スコア20

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

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

0グッド

0クリップ

投稿2017/08/23 13:56

チェックボックスを複数チェックした時にチェックされた値を
変数に配列として格納したいのですがうまくいきません。

例えば下記コードでは「A」と「C」がチェックされたときに
変数(checklist)に**[A,C]**として格納したいです。

ご教授ください。
よろしくお願いします。

html

1<form method="get" id="form_id" name="name" action="/"> 2 3 <label><input type="checkbox" name="check" id="A" value="A">A</label> 4 <label><input type="checkbox" name="check" id="B" value="B">B</label> 5 <label><input type="checkbox" name="check" id="C" value="C">C</label> 6 <label><input type="checkbox" name="check" id="D" value="D">D</label> 7 8</form>

javascript

1<script type="text/javascript"> 2 $("input[name='check']").change(function() { 3 if ($(this).prop('checked')) { 4 var checklist = (配列で格納したい); 5 } 6 }); 7</script>

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

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

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

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

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

guest

回答4

0

例えばA>B>A>C>Aの順にマウスでクリックしたとして取得したい配列が["A","B","C","A"]なら

javascript

1<script type="text/javascript"> 2var checklist = []; 3 $("input[name='check']").change(function() { 4 if ($(this).prop('checked')) { 5 checklist.push($(this).val()); 6 } 7 }); 8</script>

でいいのですが、
普通はA>B>A>C>Aの順にマウスでクリックした場合の取得したい配列は["A","B","C"]だと思うので
クリックした要素の値を調べて配列に入れるってことはせず、クリックしたタイミングで、そのときのチェックされている要素の値を配列に入れるっていうことをするべきだと思います。

なので、調べる要素はイベントを起こした要素$(this)ではなく、候補となる要素全体になるため $("input[name='check]")になります。
また、jqueryで同じセレクタの配列を取得するにはmap()とget()を使った形が便利ですのでそれを使って取得します。なお、チェックされているものだけを指定する場合はセレクタに:checkedをつければいいです。

javascript

1 2<script type="text/javascript"> 3 $("input[name='check']").change(function() { 4 var checklist = $("input[name='check']:checked").map(function(){ 5 return $(this).val(); 6 }).get(); 7 }); 8</script> 9

※もちろん、イベントの発生はマウスのクリックだけでなくキーボードを使ったチェックでも同じです。わかりやすくするため、マウスのクリックって具体的に書いただけですので誤解なきよう

あと、他の方の回答で書かれているname属性の話ですが、formの受けるCGIが何かによってルールが違うため、単に[]を付けるっていうのはちょっと違います。[]を付けるっていうルールはPHPとかですね。

投稿2017/08/23 15:07

oskbt

総合スコア1895

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

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

m.ts10806

2017/08/24 00:16

ご指摘ありがとうございました。
guest

0

HTML

1<!doctype html> 2<html lang="en"> 3<head> 4 <meta charset="utf-8"> 5 <script src="https://code.jquery.com/jquery-2.2.4.js"></script> 6</head> 7<body> 8<form method="get" id="form_id" name="name" action="/"> 9 10 <label><input type="checkbox" name="check" id="A" value="A1">A</label> 11 <label><input type="checkbox" name="check" id="B" value="B2">B</label> 12 <label><input type="checkbox" name="check" id="C" value="C3">C</label> 13 <label><input type="checkbox" name="check" id="D" value="D4">D</label> 14 15</form> 16<script type="text/javascript"> 17 var checklist = []; 18 $("input[name='check']").change(function() { 19 checklist = []; 20 $("input[name='check']").filter(":checked").map(function() { 21 checklist.push($(this).val()); 22 }); 23 console.log(checklist); 24 }); 25</script> 26</body> 27</html>

こんな感じ

投稿2017/08/23 14:16

rururu3

総合スコア5545

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

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

tepin712

2017/08/23 14:49

ありがとうございます。 大変参考になりました。
guest

0

ベストアンサー

こんなかんじかな。

HTML

1<form method="get" id="form_id" name="name" action="/"> 2 <label><input type="checkbox" name="check[]" id="A" value="A">A</label> 3 <label><input type="checkbox" name="check[]" id="B" value="B">B</label> 4 <label><input type="checkbox" name="check[]" id="C" value="C" checked>C</label> 5 <label><input type="checkbox" name="check[]" id="D" value="D">D</label> 6</form>

JavaScript

1$( function() { 2 $( 'input[name="check[]"]' ).change( function() { 3 var checklist = []; 4 $( 'input[name="check[]"]:checked' ).each( function() { 5 checklist.push( $( this ).val() ); 6 } ); 7 console.log( checklist ); 8 } ).eq( 0 ).change(); 9} ); 10```**動くサンプル:**[https://jsfiddle.net/taapydLc/](https://jsfiddle.net/taapydLc/)

投稿2017/08/23 14:11

編集2017/08/23 14:21
kei344

総合スコア69398

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

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

tepin712

2017/08/23 14:48

ありがとう御座います。希望通り出来ました。 ちなみに .eq( 0 ).change(); を付けるのは何故でしょうか。
kei344

2017/08/23 14:59

ページを開いたときに1回最初の要素(.eq( 0 ))にchangeイベントを起こしています。 checklist をどう使うかがわからないので、初期化はしておいたほうがいいかな、というコードです。(なのでなくても動きます)
guest

0

※追記:oskbtさんの回答で指摘されている通り本件の解決策とはなりません。失礼しました。

nameの指定を下記のように変更してみてください。

name="check[]"

投稿2017/08/23 14:01

編集2017/08/24 00:15
m.ts10806

総合スコア80850

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

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

x_x

2017/08/23 14:44

本気でわからないのですが、nameの変更は何か意味があるのですか?
m.ts10806

2017/08/23 23:00

入力要素を同名で配列で取得したい場合には[]つけることで可能になる、という意味です。 取得のところはkei344さんが書いてくれている通りです。
m.ts10806

2017/08/24 00:16

本件の回答としては解決策とはならない旨、追記しました。
x_x

2017/08/24 00:17

特に変更しなくても同じようですが?
m.ts10806

2017/08/24 00:25

コメントと回答編集のタイミングが若干重複してしまいましたが、追記しています。 失礼しました。
m.ts10806

2017/08/24 00:26

質問者はphpもされているようなのでそのことが頭にあったための回答となってしまいました。
x_x

2017/08/24 00:27

了解です。ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問