我想要做的是在表格中添加数据之后,我可以选择是否在行动栏中删除它。
我的问题是,如果我按下我要删除的特定行上的删除按钮,删除表中不会被删除的一些内容。有时会删除表中的所有内容。
脚本:http://jsfiddle.net/4GP2h/5/
oTable = $('#myTable').dataTable();
var data = [
$('#name').val(),
$('#age').val(),
$("#gender:checked").val(),
"<button class='delete'>Delete</button>"
];
oTable.fnAddData(data);
$('.delete').click(function(){
var row = $(this).closest('tr');
oTable.fnDeleteRow(row[0]);
});
答案 0 :(得分:3)
每次创建行时,您都会在已经存在的删除之上绑定另一个delete
事件。因此,如果您在行中生成3个项目,则删除绑定将如下所示:
ROW1 // <- Deletes on ROW1 'Delete' clicks
ROW2 // <- Deletes on ROW1, ROW2 'Delete' clicks
ROW3 // <- Deletes on ROW1, ROW2, ROW3 'Delete' clicks
因此,点击ROW1上的delete
基本上会在之后创建的每一行上调用delete。
修复方法是将$('.delete').click(function(){...});
代码移到save
事件之外,这样每次保存/添加新行时,您都不会在删除绑定上堆叠。
但是,由于您正在动态添加新的DOM元素,我们希望以不同的方式监视删除事件,以便我们可以将delete
代码绑定到任何新添加的按钮/行。
现在您的代码应如下所示:
// Moved outside save function to reference other places
oTable = $('#myTable').dataTable();
$('#Save').click(function () {
if ($('#name').val() == '' || $('#age').val() == '' || $("input[name='gender']:checked").val() == undefined) {
$("#dialog-confirm").dialog("open");
} else {
var data = [
$('#name').val(),
$('#age').val(),
$("#gender:checked").val(),
"<button class='delete'>Delete</button>"];
oTable.fnAddData(data);
}
});
// Moved outside save function and changed how the event bindings occur
$(document).on('click', '.delete', function () {
var row = $(this).closest('tr');
oTable.fnDeleteRow(row[0]);
});
您可以看到工作版here