jQuery数据表插件无法删除表格行

3

我正在努力弄清楚为什么当我点击删除按钮时,它会执行php端的操作,但当回到客户端时,它不会从表格中删除该行。我在使用datatables来管理我的表格。

$('.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');
});

1
if()语句内的代码好像不是jQuery - 你能提供这些函数的定义吗?这样我们就可以看到它们做什么了。你有检查过JS控制台以确保它没有报错吗? - halfer
你确定你进入了 if 代码块吗? - Marc
  1. 你确定if(data.success){INSIDE}里面的代码被执行了吗?
  2. 你检查过anSelected变量的值吗?它是一个数组吗,符合你的预期吗?
- Andrius Naruševičius
fnGetSelected 定义在哪里? - Mike Robinson
2个回答

2

oTable是datatables功能中的一个对象,并在其中定义。一旦函数运行完毕并渲染出其内容,该变量将被销毁,因为它不是任何全局变量。

另外:

$('.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正在更改下一次加载页面的数据,因此它不再在集合中,因此不会包含在下一次加载中。

0

您提供的代码存在多个问题...
1.根据您收到的POST请求响应,您得到了“Success”属性的“YES”值,我认为JavaScript中的if不会将其视为true
2.datatables的fnGetSelected函数需要一个实例才能工作。您不能像调用全局函数一样调用该函数。因此,如果您已经将表格引用存储在变量中,例如dTable,则可以将其调用为dTable.fnGetSelected()
所以您可能需要更改这个

var anSelected = fnGetSelected( oTable );

转换成这个

var anSelected = oTable.fnGetSelected();


我假设oTable是你的数据表
所以要调试,请按F12打开开发者工具,并在控制台或其他浏览器中查找JavaScript错误


JavaScript会将"Yes"或任何非空字符串视为true - user1106925
我已经编辑了我的回答,第二点是提供一个代码示例,请检查。 - Parv Sharma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接