【问题标题】:jQuery/JavaScript: ids for newly appended rowsjQuery/JavaScript:新附加行的 id
【发布时间】:2012-06-14 04:29:24
【问题描述】:

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

它有这样的结构:

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

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

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

//inside of the addRow function
    $('#myTable').append(“<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,如果添加了一行则有效,但如果通过“添加更多”按钮添加第二行,我在 newId 中再次添加了 3 :((

我该如何解决这个问题?如何将连续的 id 添加到新附加的行中?

【问题讨论】:

  • 您希望在什么时候将附加的行插入到数据库中?
  • 我通过带有 jQ​​uey ajax 的参数在一般的“保存更改”按钮中发送整个页面信息。我现在不担心保存在数据库中,我需要的是解决编辑和删除的事情。谢谢

标签: javascript jquery forms html-table


【解决方案1】:

在你的函数editRow 中写:

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

// Do your insertion stuff
// ...

// After insertion, raise lastID by 1
$('#lastID').val(++lastID);

【讨论】:

  • 当 2 个用户碰巧同时使用该页面时?
  • 那么在每插入一行之后就没有办法得到一个新的ID了。但没有写多用户。
【解决方案2】:

在页面上保留最后插入的 id 是个坏主意;这是一种竞争条件。有一些方法可以应用:

立即提交

addRow() 中,您可以直接与服务器通信并添加它;服务器插入记录后,它将返回 id,您可以将其插入到表中。

优点

  • 用户可以关闭浏览器,添加的行仍然会被保存。

缺点

  • 如果您要添加多条记录,服务器通信可能会减慢数据输入速度。
  • 因此,每次编辑/删除都需要进行服务器往返。

延迟提交

您可以简单地标记新记录,以便在迭代它们以构建 AJAX 请求时,可以将两个单独的列表发送到服务器;一个包含现有的(减去已删除的)和一个仅包含新的。

然后服务器会处理剩下的事情。

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

      • 从来没有问过关于并发的问题,停止向人们发送垃圾邮件!
      • @Tim - 问题暗示并发,答案需要思考。
      猜你喜欢
      • 2014-09-30
      • 2021-08-23
      • 2014-01-22
      • 1970-01-01
      • 1970-01-01
      • 2014-12-19
      • 1970-01-01
      • 2020-05-07
      • 1970-01-01
      相关资源
      最近更新 更多