javascript - 删除项目 <tr> 引导箱

标签 javascript asp.net-mvc bootbox

我正在向我的服务器发出一个 ajax 请求来删除一个项目,我必须通过 bootbox 在前端删除,我的响应没问题,但我没有在前端删除。

function Delete(data) {
       

    bootbox.confirm({
        message: "Deseja Excluir o item?",
        buttons: {
            confirm: {
                label: 'Yes',
                className: 'btn-danger'
            },
            cancel: {
                label: 'No',
                className: 'btn-success'
            }
        },
        callback: function (result) {
            if (result) {
                $.ajax({
                    url: "/Ponto/DeleteAjuste/" + data,
                    type: "POST",
                    contentType: "application/json;charset=UTF-8",
                    dataType: "json",
                    success: function (result) {
                      
                            $(this).closest("tr").remove();
                        
                    },
                    error: function (errormessage) {
                        alert(errormessage.responseText);
                    }
                });
            }
            console.log('This was logged in the callback: ' + result);
        }
    });

@foreach (var item in ViewBag.Ajuste)
            {
                <tr>
                    <td>@item.Data</td>
                    <td>@item.Descricao</td>
                    <td>@item.Horas</td>
                    
                    <td >
                        <a class="btn btn-danger btn-excluir" role="button" onclick="Delete(@item.Data)" ><i class="glyphicon glyphicon-trash"></i> Excluir</a>
                    </td>
                    
                    
                </tr>
            }

我认为问题出在这里: $(this).closest("tr").remove();

最佳答案

回调中$(this)的含义会有所不同。在您的代码示例中,它是用于 $.ajax 调用的 xhr 对象。

如果你想获取被点击的元素,你需要将 this 传递给你的 js 方法调用,并将其存储在一个变量中(在你的其他回调之前),并在你的 $.ajax 方法的成功/完成回调。

因此,在用户界面中,您将传递 this 作为 Delete 方法的第二个参数

onclick="Delete(@r.Id,this)"

在Delete方法中,您可以将其存储到局部变量中,稍后可以使用它来获取最接近的表行。

function Delete(data,t)
{
    var _this = $(t);
    bootbox.confirm({
      //Your existing code goes here. Omitted to save space
    },
    callback: function(result) {
           $.ajax({
                //Your existing code goes here. Omitted to save space
                success: function(result) {
                    _this.closest("tr").remove();
           });
       }
    });
} 

另一个选择是使用不显眼的 JavaScript。在这种方法中,您可以在 anchor 标记中设置删除操作的 url 并使用它,而不是在 javascript 代码中对其进行硬编码。另外,为 a 标签提供一个 css 类,该标签可以用作 jQuery 选择器来连接 click 事件。

<a class="btn btn-danger del-btn" 
   href="@Url.Action("DeleteAjuste","Ponto",new {id=item.Data})" 
   role="button"  ><i class="glyphicon glyphicon-trash"> </i> Excluir</a>

现在,将标签上的单击事件与我们的 css 类连接起来。使用单击的标签的 url 属性并将其用于您的 ajax 调用。例如,

$(function() {

    $("a.del-btn").click(function(e) {
        e.preventDefault();

        var _this = $(this);
        var url=_this.attr("href");
        //use url for your ajax call.
        $.post(url)
         .done(function(res){
            _this.closest("tr").remove();
        });

    });

});

关于javascript - 删除项目 <tr> 引导箱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47499822/

相关文章:

asp.net-mvc - 试图从身份中删除角色

angularjs - ng-repeat 仅在单击另一个选项卡或在文本框中键入后更新

javascript - 在另一个模态之上打开一个 bootbox 模态不会使后面的模态变暗

javascript - 如何使 Facebook Like 按钮的宽度自动调整大小?

javascript - Nodejs v0.10.25 中缺少 execSync

javascript - 将多选更改为单选下拉列表

c# - ASP NET Core 返回文件使用 IE11 失败?内容长度不匹配

JavaScript 递归基本案例

asp.net-mvc - 金七静行难解

meteor - Bootboxjs : how to render a Meteor template as dialog body