jQueryを使ってフォームの追加とnameの変更をしたいです。
Laravelを使用しています。
該当のソースコード
Blade
1<div class="area_question_group_360" id="group1"> 2 <p class="ttl">設問グループタイトル</p> 3 <div class="wrap_input wrap_required group_ttl"> 4 {!! Form::text('group[0]', null, ['placeholder' => '設問グループタイトルを記述']) !!} 5 <div class="unit_2_center btn_delete_group" data-remodal-target="modal_delete_group">削除</div> 6 </div> 7 <div class="wrap_input" id="question1"> 8 <span class="unit_2 number">Q. </span> 9 <div class="wrap_input wrap_required"> 10 {!! Form::text('question[0][0]', null, ['placeholder' => '回答選択肢を記述']) !!} 11 </div> 12 <div class="unit_2_center button_text_delete_360">削除</div> 13 </div> 14 <div class="area_add_question_360"> 15 <div class="btnarea_left"> 16 <div class="button_text_add_question_360" id="add_question">設問を追加する</div> 17 </div> 18 <div class="note">※選択肢は上限20項目です。</div> 19 </div> 20 <div class="btnarea_left_add_group"> 21 <div class="btn_goast_purple_add_group" id="add_group">設問グループを追加する</div> 22 </div> 23</div> 24 25<!-- 設問グループを複数入力する際のスクリプト --> 26<script> 27 $('#add_group').on('click', function () { 28 //要素の数をカウントして、複製したフォームのnameを変更する 29 classLength = $('[id^=group]').length; //要素数 1, 2 30 selector = "#group"+(classLength); //1つ前のID名 #company1, 2 31 newSelector = "group"+(classLength + 1); //新しいID company2,3 32 //クローン処理 33 $("#group1").clone(true).insertAfter(selector).attr('id', newSelector); 34 //複製したものに関する調整処理 35 $("#" + newSelector).find("input").each(function(i, elm){ 36 elm.name = elm.name.replace(/[[0-9]+]/, '[' + classLength + ']'); 37 elm.id = elm.id.replace(/\-[0-9]+\-/, '-' + classLength + '-'); 38 elm.value = null; 39 }); 40 }); 41</script> 42<!-- 回答選択肢を複数入力する際のスクリプト --> 43<script> 44 $('#add_question').on('click', function () { 45 //要素の数をカウントして、複製したフォームのnameを変更する 46 classLength = $('[id^=question]').length; //要素数 1, 2 47 selector = "#question"+(classLength); //1つ前のID名 #company1, 2 48 newSelector = "question"+(classLength + 1); //新しいID company2,3 49 //クローン処理 50 $("#question1").clone(true).insertAfter(selector).attr('id', newSelector); 51 //複製したものに関する調整処理 52 $("#" + newSelector).find("input").each(function(i, elm){ 53 elm.name = elm.name.replace(/[[0-9]+]/, '[' + classLength + ']'); 54 elm.id = elm.id.replace(/\-[0-9]+\-/, '-' + classLength + '-'); 55 elm.value = null; 56 }); 57 }); 58</script>
発生している問題
上記の様なフォームの場合に
1つ目のフォームのnameをgroup[0], question[0][1], question[0][2]
2つ目のフォームのnameをgroup[1], question[1][1], question[1][2] としたいのですが、
現状のコードだと
1つ目のフォームのnameがgroup[0], question[1][0], question[2][0]
となってしまいます。2つ目以降の追加したもののnameもうまく変更できていません。
アドバイスをご教示いただけると幸いです。
回答2件
あなたの回答
tips
プレビュー