jQuery数据表插件不删除表行

时间:2012-04-25 22:44:49

标签: jquery datatables

我正在试图弄清楚为什么当我点击我的删除按钮时它会改变执行php方面的东西但是当它返回到客户端时它不会删除表中的行。我正在为我的桌子使用数据表。

$('.delete').click(function() { 
    var titleID = $(this).attr('rel');
    $.post('titles/delete', { titleID:titleID }, function(data) {
        if (data.success)
        {
            var anSelected = fnGetSelected( oTable );
            oTable.fnDeleteRow( anSelected[0] );
        }
    });
});

php方面的回应是:

{"success":"Yes","message":"Title was deleted successfully!"}

编辑:

这就是我现在正在使用的内容,我收到一条有趣的错误消息,指出未定义fnGetSelected。所以我不确定我是否正确地删除了一个表行。

$('.delete').click(function() { 
var titleID = $(this).attr('rel');
$.post('titles/delete', { titleID:titleID }, function(data) {
    if (data.success)
    {
        var anSelected = fnGetSelected( oTable );
        oTable.fnDeleteRow( anSelected[0] );
    }
}, 'json');
});

2 个答案:

答案 0 :(得分:2)

oTable是在数据表功能中找到的对象,并在其中定义。一旦函数运行并且渲染了它将会被破坏的变量,因为它不是任何类型的全局变量。

$('.delete').click(function() { 
    var titleID = $(this).attr('rel');
    $.post('titles/delete', { titleID:titleID }, function(data) {
        if (data.success)
        {
            var anSelected = fnGetSelected( oTable );
            oTable.fnDeleteRow( anSelected[0] );
        }
    });
});

如果您希望使用$ .post和数据返回,指定您想要的数据和类型是个好主意

$('.delete').click(function() { 
    var titleID = $(this).attr('rel');
    $.post('titles/delete', { titleID:titleID }, function(data) {
        if (data.success)
        {
            var anSelected = fnGetSelected( oTable );
            oTable.fnDeleteRow( anSelected[0] );
        }
    }, 'json');
});

另外值得一提的是,不是在渲染后尝试使用数据表对象,而是根据“删除”按钮所在的位置,你可以而且最可能是最简单的路径。

$(this).parent('tr').remove();

假设按钮/链接是什么,与要删除的那一行在同一行..你可以做上面提到的事情,因为这纯粹是为了删除有问题的表行的视觉效果。还假设您的ajax正在更改下次加载页面时的数据,因此它不再出现在集合中,因此不会包含在下一次加载中

答案 1 :(得分:0)

这里提供的代码存在多个问题...
1.通过您获得POST请求的响应 您在“成功”属性中获得“YES”值,我认为javascript中的if将视为true
2. fnGetSelected数据表的函数需要一个实例来处理...你不能只是调用函数就像它是一个全局函数一样..所以如果你将表引用存储在像dTable这样的变量中然后你可以称之为dTable.fnGetSelected()
所以你应该改变这个

var anSelected = fnGetSelected( oTable );

到这个

var anSelected = oTable.fnGetSelected();


我假设oTable有你的数据表
所以要通过按f12调试打开开发人员工具,并在控制台或任何地方查找javascript错误,具体取决于你的浏览器