有问题删除数据表中的特定行

时间:2014-07-10 16:20:55

标签: javascript jquery html datatable datatables

我想要做的是在表格中添加数据之后,我可以选择是否在行动栏中删除它。

我的问题是,如果我按下我要删除的特定行上的删除按钮,删除表中不会被删除的一些内容。有时会删除表中的所有内容。

脚本: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]);
});

1 个答案:

答案 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