1

我的网页中有一个 html 表格。它充满了我数据库中的信息。

它有这样的结构:

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

该表位于表单内,并有一个“添加更多”按钮。

当您点击该按钮时,会显示一个模式窗口,您可以使用以下方法将另一个标题作者行附加到表中:

//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);

我的问题来了,ids。

来自数据库的信息有一个固定的 id(1 和 2),但我应该如何处理附加了“添加更多”按钮的行的 id?

到目前为止,我所做的是从数据库行中获取最后一个 id 并将其放入表中的隐藏字段中,然后放入我的 js 文件中:

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

newId 为 3,如果添加了一行,则有效,但如果通过“添加更多”按钮添加第二行,我在 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 请求时,可以将两个单独的列表发送到服务器;一个包含现有的(减去已删除的)和一个仅包含新的。

然后服务器将处理其余的事情。

于 2012-06-11T09:16:27.853 回答
0

在追加新行期间,将 lastId 变量增加 1。

一个可能更好的解决方案是通过检查表中的所有行并更新变量来重新计算最后一个 Id。

于 2012-06-11T09:17:01.503 回答
0

如果,正如您在评论中所说,您将整个页面一起提交,类似于“保存所有内容”的操作,那么新添加的行不应该ID。不要陷入试图将最后一个已知的 Id 增加 1 的陷阱,因为 2 个并发用户最终会覆盖彼此的记录。

对于新行,删除按钮很明显,它只是将新添加的行从表中删除。对于更新,只需更新该行中的数据。这些新行可以被赋予一个 id ,0这样当您提交页面时,您就知道哪些是新的 (Id=0) 哪些是更新的 (Id>0)。

于 2012-06-11T09:22:03.280 回答