You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

按钮带data-id属性时Datatables行删除失败,$(this).closest('tr').remove()无效

问题根因

你遇到的删除行失效问题核心是this指向变化:在$.ajax的success回调函数中,默认this指向的是当前Ajax请求的配置对象,不再指向你点击的删除按钮元素,因此$(this).closest("tr")无法匹配到对应的表格行,删除操作自然不生效。

解决方法

以下三种常用方案任选一种即可:

  • 方案1:提前缓存目标行/按钮元素
    在发起Ajax请求前,先把当前点击按钮对应的表格行存为临时变量,回调函数中直接调用缓存对象执行删除即可,兼容性最好。
    修改后的代码示例:
$('#table_mediaBank').on('click', '.remove', function () {
  var id = $(this).data('id'); 
  var media = $(this).closest('tr').find('td:eq(1)').text();
  // 提前缓存要删除的行对象
  var $deleteRow = $(this).closest('tr');

  if(confirm("你确定要删除媒体 '" + media + "' 吗?")) {
      $.ajax({
        url: 'pages/delete.php',
        type: 'POST',
        data: {id: id},
        error: function() {
          alert('删除媒体ID ' + id + ' 时发生错误');
        },
        success: function(data) {
          // 直接操作缓存的行对象删除
          $deleteRow.remove();
        }
    });
  }
});
  • 方案2:使用箭头函数作为success回调
    ES6箭头函数不会绑定独立的this,会继承外层作用域的this,也就是点击事件中对应的删除按钮元素。
    修改示例仅需改动success的定义:
success: (data) => {
  $(this).closest("tr").remove();
}
  • 方案3:配置Ajax的context参数
    在$.ajax的配置项中添加context: this,指定所有回调函数的this指向外层的按钮元素,原有success代码无需改动。
    修改示例:
$.ajax({
  url: 'pages/delete.php',
  type: 'POST',
  data: {id: id},
  // 指定回调的this指向外层按钮
  context: this,
  error: function() {
    alert('删除媒体ID ' + id + ' 时发生错误');
  },
  success: function(data) {
    // 原有代码可直接生效
    $(this).closest("tr").remove();
  }
});

内容的提问来源于stack exchange,提问作者Nico van Wijk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 05:24:07