CakePHP ver2.7.5にて、編集画面に「フォームを動的に追加して一括保存する機能」を追加したいと考えています。
そこで動的にフォームを追加するスクリプトを組み、フォームの生成も動作しました。しかし、Controllerに引き渡されている配列を確認すると、動的に追加したフォームのデータが配列に格納されていませんでした。
原因につきまして、ご教示のほどお願い致します。
(画面イメージ)
カラム1 | カラム2 | 削除ボタン
データ | データ | [削除] ・・・DBから取得
データ | データ | [削除] ・・・同上
データ | データ | [削除] ・・・同上
[追加ボタン] ・・・最終行にフォームを追加
[保存ボタン] ・・・データをPostする(データの更新、新規作成処理)
(受け渡される配列のイメージ)
※Controllerでdebug($this->request->data)した結果
※(int)12 ~ 14は元々DBに格納されていたデータです。
array(
'TestDetail' => array( (int) 12 => array( 'id' => '12', 'title' => 'test1-1', 'content' => '' ), (int) 13 => array( 'id' => '13', 'title' => 'test1-2', 'content' => '' ), (int) 14 => array( 'id' => '14', 'title' => 'test1-3', 'content' => '' ), new1 => array( 'id' => '14', 'title' => 'test1-3', 'content' => '' ),
(実際に受け渡される配列のイメージ)
array(
'TestDetail' => array( (int) 12 => array( 'id' => '12', 'title' => 'test1-1', 'content' => '' ), (int) 13 => array( 'id' => '13', 'title' => 'test1-2', 'content' => '' ), (int) 14 => array( 'id' => '14', 'title' => 'test1-3', 'content' => '' ) )
・view(中略)
PHP
1<tbody> 2 <?php foreach ($datas as $data): ?> 3 <tr> 4 <?php 5 $id = intval($data['TestDetail']['id']); 6 $target_id = "data[TestDetail][".$id."]"; 7 ?> 8<td class="col-xs-3"> 9 <input type="hidden" <?php echo 'name='.$target_id.'[id] value='.$data['TestDetail']['id'] ?> > 10 <input type="text" <?php echo 'name='.$target_id.'[title] value='.$data['TestDetail']['title'] ?>> 11</td> 12<td class="col-xs-7" style="text-align:left"> 13 <input type="text" <?php echo 'name='.$target_id.'[content] value='.$data['TestDetail']['content'] ?>> 14</td> 15<td class="col-xs-2"> 16 <button class="btn btn-default" type="button"> 17 削除 18 </button> 19</td> 20</tr> 21<?php endforeach;?> 22</tbody> 23 24</table> 25<!--行追加ボタン--> 26 <button class="btn btn-primary" type="button" id="rowAdd">追加</button>
・行追加ボタンのスクリプト
JavaScript
1<script> 2$(document).ready ( function() { 3 var index = 0; 4 5 $('#rowAdd').click(function() { 6 index ++; 7 var $newTitle = "<td class='col-xs-3'><input type='text' name='data[TestDetail][newData"+index+"][title]'></td>"; 8 var $newContent = "<td class='col-xs-7'><input type='text' name='data[TestDetail][newData"+index+"][content]'></td>"; 9 var $newRemove = "<td class='col-xs-2 remove'><button class='btn btn-default' type='button'>削除</button></td>"; 10 var $newRow = "<tr>"+$newTitle+$newContent+$newRemove+"</tr>"; 11 12 // 最後の行に追加 13 $('#target').append($newRow); 14 $('#target tr:last').hide().fadeIn(500); 15 }); 16 }); 17 18 /* 追加した行を削除 */ 19 $(document).on('click','.remove',function () { 20 $(this).parent().fadeOut('slow',function(){$(this).remove();}); 21 }); 22</script>
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/02/09 04:04
2016/02/09 04:47