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

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

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

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

jQuery

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

HTML

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

Q&A

解決済

2回答

2667閲覧

jQueryでチェックした値をデータ属性に入れる

ninjanin

総合スコア26

JavaScript

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

jQuery

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

HTML

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

0グッド

1クリップ

投稿2019/04/05 03:17

編集2019/04/05 03:47

###実現したいこと
チェックしたとき
valueを取得し、2つのボタン(#a#b)のデータ属性(data-check)に入れる

チェックを外したとき
valueを取得し、2つのボタン(#a#b)のデータ属性(data-check)から削除

###該当のソースコード
こちらが実現したいHTMLです。

HTML

1<div class="box"> 2 <input type="checkbox" value="1"> 3</div> 4 5<div class="box"> 6 <input type="checkbox" value="2"> 7</div> 8 9<button type="button" id="a" data-check_a="[]">ボタン</button> 10<button type="button" id="b" data-check_b="[]">ボタン</button>

###試したソースコード
間違ったところ、気を付けるべき点などを教えていただけましたら幸いです。

jQeury

1$(document).on("change",".box input", function(){ 2 // 対象のIDを取得 3 var check_id = $(this).val(); 4 // 現在のIDを取得 5 var check_id_arr_a = $('#a').attr('data-check'); 6 var check_id_arr_b = $('#b').attr('data-check'); 7 // チェックされたらIDを追加 8 if( $(this:checked) ){ 9 check_id_arr_a.push(check_id); 10 check_id_arr_b.push(check_id); 11 } 12 // チェックが外れたらIDを削除 13 else{ 14 check_id_arr_a.slice(check_id); 15 check_id_arr_b.slice(check_id); 16 } 17 // IDを更新 18 $('#a').attr('data-check',check_id_arr); 19 $('#b').attr('data-check',check_id_arr); 20}); 21 22

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

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

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

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

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

m.ts10806

2019/04/05 03:23

今現状起きている問題は何でしょうか。起きていないのでしたら回答は得られにくいと思います。
guest

回答2

0

ベストアンサー

こんにちは

間違ったところ、気を付けるべき点などを教えていただけましたら幸いです。

以下の2点かなと思います。

(1) data- 属性の取得と設定は .data()を使う。

(2) チェックされているかどうかの判定には、.prop() または .is() を使う。

上記2点ついて修正したコードを、以下

 

に挙げておきますので、確認してみてください。
参考になれば幸いです。

追記

コメント欄からご質問に回答します。

①「toArray」が何をしているのか?

$('input:checked') によって、チェックされている(0個以上2個以下の)チェックボックスを含むJQueryオブジェクトが返され、 JQueryオブジェクトのtoArray() メソッドで、該当したDOM要素の配列(Arrayオブジェクト)が返されます。

②「e =>」が何を指すのか?

e => e.value

はES6から導入されたアロー関数と呼ばれる形式の関数表記で、上記は以下と同じです。

function(e) { return e.value; }

この function を使うほうの書き方で、サンプルを書き換えると以下になります。

https://jsfiddle.net/jun68ykt/2acny4bu/4/

③「e.value」が何を指すのか?

e.value には <input> の value 属性の値が入っています。

参考: https://developer.mozilla.org/ja/docs/Web/HTML/Element/input#value

.mapはループみたいなものですよね?

そうですね。配列 ary があったときに、ary の各要素に対して何かをしたいときに for ループを使えば

javascript

1for (var i=0; i < ary.length; i ++ ) { 2 // ary[i] に対して何かをする 3}

としますが、何をするのかによって、Arrayのメソッド map のほか、forEach, reduce などを使って forループの替わりに

  • ary.map(f)

  • ary.forEach(f)

  • ary.reduce(f)

などと書けます。なお上記で f は何らかの関数です。

参考:

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/map

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce

投稿2019/04/05 03:45

編集2019/04/05 06:10
jun68ykt

総合スコア9058

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

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

ninjanin

2019/04/05 03:49

わかりやすく教えてくださってどうもありがとうございます!
ninjanin

2019/04/05 04:49

これはまたシンプルでいいですね! でもどうしてこちらで「value の配列を作成」できるのですか? .toArray().map(e => e.value); ①「toArray」が何をしているのか? ②「e =>」が何を指すのか? ③「e.value」が何を指すのか? かなり不思議です。 .mapはループみたいなものですよね?
jun68ykt

2019/04/05 06:12

> これはまたシンプルでいいですね! どうもです???? 質問に対する答えは、回答のほうに追記しました。
guest

0

javascript

1<script> 2$(function(){ 3 $(':checkbox').on('change',function(){ 4 $('button').data('check',$(':checkbox:checked').map(function(){ 5 return $(this).val(); 6 }).get()); 7 }); 8 $('button').on('click',function(){ 9 console.log($(this).data('check')); 10 }); 11}); 12</script> 13 14<input type="checkbox" value="1"> 15<input type="checkbox" value="2"> 16<button type="button" data-check="[]">ボタン</button>

属性を変える

前述の機能はプロパティを変えていましたが

javascript

1<script> 2$(function(){ 3 $(':checkbox').on('change',function(){ 4 $('button').attr('data-check',JSON.stringify($(':checkbox:checked').map(function(){ 5 return parseInt($(this).val()); //値が整数に限定される場合 6 }).get())); 7 }); 8}); 9</script> 10 11<input type="checkbox" value="1"> 12<input type="checkbox" value="2"> 13<button type="button" data-check="[]">ボタン</button>

投稿2019/04/05 03:33

編集2019/04/05 03:55
yambejp

総合スコア114829

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

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

ninjanin

2019/04/05 03:49 編集

ありがとうございます。じょうきゅうしゃ向けですね。
yambejp

2019/04/05 03:49

$('button').data('check')がなにをやりたいのかわからないです 私の提示したとおりボタンをおしたときconsole.logで中身を確認はできてますか?
ninjanin

2019/04/05 03:50

失礼いたしました。その後jun68ykt様のご回答でなんとか実現できました。
yambejp

2019/04/05 03:56

属性を変える方法も追記しておきました
ninjanin

2019/04/05 04:51

ありがとうございます。引き続き研究中です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問