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

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

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

リアルタイム通信が10倍楽しくなるJavaScript1行でバックエンドを提供するmilkcocoa, 2015年最初のmilkcocoa meetupです

Q&A

解決済

1回答

387閲覧

チェックボックスとフォームの活性化で数が増えて行った時

njsjsjsjsjsjsja

総合スコア1

milkcocoa meetup#2

リアルタイム通信が10倍楽しくなるJavaScript1行でバックエンドを提供するmilkcocoa, 2015年最初のmilkcocoa meetupです

0グッド

0クリップ

投稿2022/06/20 18:00

チェックボックスと入力フォームを連動させたいのですが、数が増えて行った時の記述が分からず困っています。

html

1<tbody> 2 <tr> 3 <td><input id="Check01" type="checkbox" class="Check"><label for="Check01"></label> 4 <td><input class="" type="number" id="Check01" name="formText"></td> 5 </tr> 6 <tr> 7 <td><input id="Check02" type="checkbox" class="Check"><label for="Check01"></label> 8 <td><input class="" type="number" id="Check01" name="formText"></td> 9 </tr> 10</tbody>

JavaScript

1 <script> 2 $(function() { 3 4 var submitText = $('[name=formText]'); 5 6 submitText.attr('disabled', 'disabled'); 7 8 $('.Check').click(function() { 9 if ( $(this).prop('checked') == false ) { 10 submitText.attr('disabled', 'disabled'); 11 } else { 12 submitText.removeAttr('disabled'); 13 } 14 }); 15 }); 16 </script>

Check01にチェックが入ったらCheck01の入力フォームが解放されて
Check02にチェックが入ったらCheck02の入力フォームに解放されるようにしたいのですが今のままだとチェックを入れると全部の入力フォームが解放されてしまいます。
ボックスの数はどんどん増えてくのでidで拾ってくやり方は難しく、親要素を拾って・・・のようなやり方かなと思うのですがどのように記述したらいいかご教示いただけると幸いです。

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

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

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

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

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

arcxor

2022/06/20 18:22

複数の type=number の input 要素に対して、同じ name 属性値 formText を付けているのはどういう意図ですか?
njsjsjsjsjsjsja

2022/06/20 18:27

すみません。JS初心者なもので・・・ここは特に意図がないのでこの部分は無視していただいて大丈夫です
guest

回答1

0

ベストアンサー

closest() で先祖要素を拾って、find() で子孫要素を拾い直してください。

js

1 $('.Check').click(function() { 2 const number = $(this).closest('tr').find('input[type="number"]'); 3 if (!$(this).prop('checked')) { 4 number.attr('disabled', 'disabled'); 5 } else { 6 number.removeAttr('disabled'); 7 } 8 });

Check02だけ最初からデフォルトでチェックが入っていてフォームが開放されてる状態にすることは可能でしょうか?

html

1<table> 2 <tbody> 3 <tr> 4 <td><input id="Check01" type="checkbox" class="Check"></td> 5 <td><input id="Number01" type="number"></td> 6 </tr> 7 <tr> 8 <td><input id="Check02" type="checkbox" class="Check" checked></td> 9 <td><input id="Number02" type="number"></td> 10 </tr> 11 </tbody> 12</table>

js

1$(function() { 2 function toggleNumber() { 3 const number = $(this).closest('tr').find('input[type="number"]'); 4 if (!$(this).prop('checked')) { 5 number.attr('disabled', 'disabled'); 6 } else { 7 number.removeAttr('disabled'); 8 } 9 } 10 11 const checkboxes = $('.Check'); 12 checkboxes.on('click', toggleNumber); 13 checkboxes.each((idx, checkbox) => { 14 toggleNumber.call(checkbox); 15 }); 16});

投稿2022/06/20 18:32

編集2022/06/20 19:11
arcxor

総合スコア2859

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

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

njsjsjsjsjsjsja

2022/06/20 18:52

早々にご回答ありがとうございます! こちら例えばCheck01は最初チェックが入っておらずフォームが開放されてない状態 Check02だけ最初からデフォルトでチェックが入っていてフォームが開放されてる状態にすることは可能でしょうか?
arcxor

2022/06/20 19:13

checked 属性のある input の場合にはデフォルトでフォームを開放するようなコードを追加しました。
njsjsjsjsjsjsja

2022/06/20 19:21

ありがとうございます!! 本当に助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問