やりたいこと
tableタグを使い画面上にデータを表示しています。
最終列には編集というボタンを用意しております。
編集ボタンを押すと、ボタンが押された行のデータを別のページにPOSTしたいと考えております。
POSTのハンドリグを行っているサーバはnode.jsになります
- html(http://example.com/table)
<form role="form" name="form" method="post" action="./table/edit"> <table> <thead> <tr> <th>id</th> <th>name</th> <th>age</th> <th>編集</th> </tr> </thead> <tbody> <tr> <td>01</td> <td>suzuki</td> <td>18</td> <td><button type="submit" name="postData[]" onclick="GetTdData()">編集</button></td> </tr> <tr> <td>02</td> <td>tanka</td> <td>19</td> <td><button type="submit" name="postData[]" onclick="GetTdData()">編集</button></td> </tr> <tr> <td>03</td> <td>saitou</td> <td>2o</td> <td><button type="submit" name="postData[]" onclick="GetTdData()">編集</button></td> </tr> ・ ・ <<省略>> </tbody> </table> </form>
やってみたこと
以下のようなjqueryを作成してみましたが、「data[]」に格納された配列データをhtml側で定義したname「postData[]」に配列データとしてキレイに渡す事が出来ません。
- javascript(jquery)
function GetTdData(){ // セレクタを指定したclickイベントでは要素が取得できないためonメソッドを利用 $(document).on('click', ':button', function(){ // tdの数 var tdNum = $(this).closest('tr').children('td').length; var ti = 0; var data = new Array(); for (ti=0; ti<tdNum; ti++) { data[ti] = $(this).closest('tr').children('td').eq(ti).text(); $(':button[name="postData[]"]').eq(ti).val(data[ti]); }; };
- node.js(express使ってます。だいぶ省略してすみません)
router.post('/edit', function(req, res, next) { console.log('call table edit page'); console.log(req.body) });
以下のような出力になってしまいます
{ targetTable_length: '10', 'postData[]': '0' }
今回のようにテーブルで表示されたデータから、ある行のデータを別のページに飛ばして利用したいと行った場合に「hidden」を使わずに飛ばすやり方を皆様はどのように実現されておりますか?
もし参考になるページやプログラムがあればご紹介頂けると嬉しいです
回答2件
あなたの回答
tips
プレビュー