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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

checkbox

checkboxは、GUIのエレメントです。また、HTML<input>タグのtype属性で扱われる値を指します。

jQuery

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

Q&A

解決済

2回答

824閲覧

jQueryで親要素を指定して繰り返し処理させたい

umioyo

総合スコア29

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

checkbox

checkboxは、GUIのエレメントです。また、HTML<input>タグのtype属性で扱われる値を指します。

jQuery

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

0グッド

0クリップ

投稿2021/04/08 02:59

次のようなHTMLを組んでおります。

HTML

1<ul class="list"> 2 <li> 3 <div> 4 <p>製品A</p> 5 <ul> 6 <li><label><input type="checkbox" name="nameA[]" value="A-1">製品A-1</label></li> 7 <li><label><input type="checkbox" name="nameA[]" value="A-2">製品A-2</label></li> 8 <li><label><input type="checkbox" name="nameA[]" value="A-3">製品A-3</label></li> 9 <li><label><input type="checkbox" name="nameA[]" value="A-4">製品A-4</label></li> 10 </ul> 11 </div> 12 </li> 13 <li> 14 <div> 15 <p>製品B</p> 16 <ul> 17 <li><label><input type="checkbox" name="nameB[]" value="B-1">製品B-1</label></li> 18 <li><label><input type="checkbox" name="nameB[]" value="B-2">製品B-2</label></li> 19 <li><label><input type="checkbox" name="nameB[]" value="B-3">製品B-3</label></li> 20 <li><label><input type="checkbox" name="nameB[]" value="B-4">製品B-4</label></li> 21 </ul> 22 </div> 23 </li> 24</ul>

checkboxで何か選択されたとき、同じ製品内で選ばれているすべての要素を<p>タグ内に書き換えたいと思っています。
例えば、製品B-2と製品B-3が選ばれたら「製品B-2,製品B-3」と<p>製品B</p>のところを書き換えます。

そこで、以下のように書いてみました。

$('ul.list label').on("click", function(){ var buf=""; $(this).parent('li').each(function(index, element){ if($('input[type="checkbox"]', element).prop("checked")){ if( buf ){ buf=buf + ','; } buf += $(element).text(); } }); console.log(buf); });

選択した値は取得できるのですが、すでに選ばれているものが引用できません。
eachの部分がparentで指定しているので親要素だけのliを見ているのかなと考えているのですが、どのように書けば他のli要素も見に行くでしょうか。

よろしくお願い致します。

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

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

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

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

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

guest

回答2

0

ベストアンサー

どのように書けば他のli要素も見に行くでしょうか。

もう一つ上のulまでさかのぼってから、改めてliを探せば良いと思います。その場合、parent()だとマズいので、closest()を使いましょう。

javascript

1$(this).closest('ul').find('li').each(function(index, element){ 2 ...

あと、いまはlabel要素のclickイベントにハンドラを仕込んでますが、それだと、クリックした箇所(チェックボックスの四角か、ラベル部分か)によって挙動が変わってしまう可能性があるので、チェックボックスのchangeイベントに仕込んだ方が良いかもしれません。

javascript

1$('input[type=checkbox]').on('change', function(){ 2 ...

投稿2021/04/08 03:47

gpsoft

総合スコア1323

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

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

umioyo

2021/04/08 05:45

ありがとうございました。 closestは知らなかったので勉強になりました。 イベントハンドラの件もご指摘ありがとうございます。まさにその通りですね。
guest

0

javascript

1$(function(){ 2 $('p').attr('data-default',function(){return $(this).text();}); 3 $('[name="nameA[]"],[name="nameB[]"]').on('change',function(){ 4 var text=$('[name="'+$(this).attr('name')+'"]:checked').map(function(){ 5 return $(this).closest('label').text(); 6 }).get().join(','); 7 $(this).closest('div').find('p').text(text||function(){return $(this).data('default')}); 8 }); 9});

投稿2021/04/08 05:02

yambejp

総合スコア114839

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

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

umioyo

2021/04/08 05:46

ありがとうございます。 試してみたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問