1

Web ページに html テーブルがあります。私のデータベースからの情報でいっぱいです。

次のような構造になっています。

Id- Title –Author
1 – Africa – John Smith
2- Europe- Martin Coole

テーブルはフォーム内にあり、「さらに追加」ボタンがあります。

そのボタンを押すと、モーダル ウィンドウが表示され、次のコマンドを使用して別の title-author 行をテーブルに追加できます。

//inside of the addRow function
    $('#myTable').append(“&lt;tr><td>..”);

テーブルには、各行の編集および削除ボタンもあります。onclickには次のものがあります。

//For the edit button
 editRow(id, value1, value2);
//For the delete button
 deleteRow(id);

そして、ここで私の問題、IDが発生します。

データベースからの情報には固定の ID (1 と 2) がありますが、[さらに追加] ボタンで追加された行の ID をどのように処理すればよいですか?

これまでに行ったことは、データベース行から最後の ID を取得し、それをテーブルの非表示フィールドに入れ、次に js ファイルに入れることです。

var lastID = $('#lastID').val();
var i = 1;
var newId = parseInt (lastID)+i;

newId は 3 で、これは 1 つの行が追加された場合に有効ですが、「さらに追加」ボタンを使用して 2 番目の行が追加された場合、newId には再び 3 があります :((

どうすればこれを修正できますか? 新しく追加された行に連続した ID を追加するにはどうすればよいですか?

4

4 に答える 4

1

関数に次のeditRowように記述します。

var lastID = $('#lastID').val();

// Do your insertion stuff
// ...

// After insertion, raise lastID by 1
$('#lastID').val(++lastID);
于 2012-06-11T09:16:26.743 に答える
1

ページに最後に挿入された ID を保持することはお勧めできません。これは一種の競合状態です。適用できるアプローチがいくつかあります。

即時コミット

内部addRow()では、サーバーと直接通信して追加します。サーバーがレコードを挿入した後、ID が返され、それをテーブル内に挿入できます。

長所

  • ユーザーはブラウザーを閉じることができ、追加された行は引き続き保存されます。

短所

  • 複数のレコードを追加する場合、サーバー通信によりデータ入力が遅くなる場合があります。
  • これにより、すべての編集/削除は、サーバーのラウンドトリップを行うためにも必要になります.

遅延コミット

新しいレコードにマークを付けるだけで、それらを繰り返し処理して AJAX 要求を作成するときに、2 つの別個のリストをサーバーに送信できます。1 つは既存のもの (削除されたものを除く) を含み、もう 1 つは新しいもののみを含みます。

サーバーが残りの処理を行います。

于 2012-06-11T09:16:27.853 に答える
0

コメントで言うように、ページ全体を「すべてを保存する」操作のようなものとして一緒に送信する場合、新しく追加された行にはID がありません。2 人の同時ユーザーが互いのレコードを上書きすることになるため、最後の既知の ID を 1 ずつインクリメントしようとするトラップに陥らないでください。

新しい行の場合、削除ボタンは明らかで、新しく追加された行をテーブルから削除するだけです。更新の場合は、その行のデータを更新するだけです。これらの新しい行には の ID を指定できる0ため、ページを送信するときに、どれが新しい (Id=0) でどれが更新された (Id>0) かがわかります。

于 2012-06-11T09:22:03.280 に答える
0

新しい行を追加するときに、lastId 変数を 1 増やします。

おそらくより良い解決策は、テーブル内のすべての行をチェックして最後の Id を再計算し、変数を更新することです。

于 2012-06-11T09:17:01.503 に答える