jQuery/JavaScript:新附加行的 ids
jQuery/JavaScript: ids for newly appended rows
我的网页里有一个html表格。它充满了来自我的数据库的信息。
它具有以下结构:
Id- Title –Author
1 – Africa – John Smith
2- Europe- Martin Coole
该表位于表单内,并具有"添加更多"按钮。
当您点击该按钮时,将显示一个模式窗口,您可以使用以下命令将另一个标题作者行附加到表中:
//inside of the addRow function
$('#myTable').append(“<tr><td>..”);
该表还具有每行的编辑和删除按钮。 点击具有:
//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 添加到新附加的行中?
在你的函数中editRow
写:
var lastID = $('#lastID').val();
// Do your insertion stuff
// ...
// After insertion, raise lastID by 1
$('#lastID').val(++lastID);
在页面上保留最后插入的 id 是一个坏主意;这是一种竞争条件。有一些方法可以应用:
立即提交
在addRow()
内部,您可以直接与服务器通信并添加它;服务器插入记录后,它将返回 id,您可以将其插入表中。
优点
- 用户可以关闭浏览器,添加的行仍将保存。
缺点
- 如果要添加多条记录,服务器通信可能会减慢数据输入速度。
- 因此,每次编辑/删除也需要进行服务器往返。
延迟提交
您可以简单地标记新记录,以便在循环访问它们以构造 AJAX 请求时,可以向服务器发送两个单独的列表;一个包含现有列表(减去已删除的列表),另一个仅包含新列表。
然后,服务器将负责其余的工作。
在追加新行期间,将 lastId 变量递增 1。
也许更好的解决方案是通过检查表中的所有行并更新变量来重新计算最后一个 Id。
如果,正如您在评论中所说的那样,您将整个页面一起提交,就像"保存所有内容"类型的操作一样,那么新添加的行不应该有 ID。不要陷入试图将最后一个已知 Id 增加 1 的陷阱,因为 2 个并发用户最终会覆盖彼此的记录。
对于新行,删除按钮很明显,它只是从表中删除新添加的行。对于更新,只需更新该行中的数据。可以为这些新行指定 id 0
,以便在提交页面时知道哪些是新的 (Id=0),哪些是更新的 (Id>0)。
- jQuery-尝试附加每个要选择的新选项
- 使用ajax发送rowID并将选定的行附加到新表中
- 如何将新的stateObject添加或附加到历史记录中
- 将新对象“附加”到 ng 重复项
- 如何在添加新记录时附加委托
- 使用父标签中的样式属性附加新标签
- 将文本区域新行文本附加为锚文本
- 带有附加元素的新数组不会可视化
- 如何在Javascript中的对象数组的最后一个对象之后附加几个新对象
- 使用 Javascript 在页面末尾附加新内容
- jQuery:如何将事件附加到类内新创建的元素
- 从文本框中附加url,然后使用javascript打开新窗口
- 写循环以获取新行并附加到数据集中的旧行
- 如何将新附加的元素存储到变量中
- jQuery/JavaScript:新附加行的 ids
- 要将文本字段的光标从活动文本字段移动到新附加的文本字段,仅当活动文本字段已填充时,才从键盘按下回车键
- 关于新附加的HTML的Javascript window.print()问题
- 为新附加的元素找到合适的事件
- 将元素HTML附加到新附加的textarea中
- ng 单击不起作用新附加的元素