【问题标题】:(AJAX) How do I make a jQuery POST delete confirmation button?(AJAX) 如何制作 jQuery POST 删除确认按钮?
【发布时间】:2017-07-29 14:44:31
【问题描述】:

我有一个带有 jQ​​uery 模态弹出窗口的 ajax POST 删除方法,当我单击删除按钮时它会删除课程。弹出窗口出现,但是当我关闭弹出窗口并刷新页面时,我看到记录已被删除。

有没有办法实现一个带有 jQ​​uery 弹出窗口的确认按钮,只有当用户点击“是”并自动刷新页面时它才会被删除?

HTML

@Html.ActionLink("Delete", "Delete", new { id = item.CourseID }, new { @class = "deletebtn", @id=item.DepartmentID })

<div id="dialog" title="Delete Department" style="display: none">
    <p>Are you sure you want to delete this Course?</p>
    <button id="confirm-deletion">Yes</button>
    <button id="abort-deletion">No</button>
</div>

脚本

    <script>
    $(function () {
        $(".deletebtn").on("click", function (e) {
            e.preventDefault();
            $('#dialog').dialog();

            var btnobj = $(this);
            var id = btnobj[0].id;

            $('#confirm-deletion').on("click", function() {

                //$('#dialog').dialog();

                //var btnobj = $(this);
                //var id = btnobj[0].id;
                //console.log(btnobj);

                var token = $('input[name="__RequestVerificationToken"]').val();
                var data = { id: id, __RequestVerificationToken: token };

                $.ajax({
                    type: "POST",
                    url: "@Url.Action("Delete","Course")",
                    data: data,
                    //ajaxasync: true,
                    success: function () {
                        console.log("success");
                    },
                    error: function () {
                        console.log("failed");
                    }
                });
            });
        });
    });
</script>

【问题讨论】:

    标签: javascript jquery html ajax asp.net-mvc


    【解决方案1】:

    正如 gerrit 所说,为对话框中的每个按钮定义点击函数,并使用 ajax 将代码移动到函数中。在点击中调用函数。

     $( ".selector" ).dialog({
      buttons: [
        {
          text: "Ok",
          icons: {
            primary: "ui-icon-heart"
          },
          click: function() {
            $( this ).dialog( "close" );
          }
    
          // Uncommenting the following line would hide the text,
          // resulting in the label being used as a tooltip
          //showText: false
        }
      ]
    });
    

    jquery dialog docs

    【讨论】:

    • 删除后能否自动刷新页面?目前,我只能在手动刷新页面后验证记录是否被删除。
    • 你可以添加'window.location.reload();'要在 ajax 成功后刷新页面,或者如果您可以访问 ajax 成功中的“id”,您还可以选择该项目并将其删除,而无需重新加载页面“$('#' + id).remove()。您甚至可以将对话框中的 id 一直传递到 ajax 成功。
    【解决方案2】:

    您打开了对话框,但这并不能阻止 AJAX 请求被执行。为什么会呢?您所做的只是打开一个对话框,然后立即发送您的 AJAX 请求。您需要在单击模态对话框内的按钮时执行请求,而不是在打开时执行请求。

    HTML:

    <div id="dialog" title="Delete Department" style="display: none">
      <p>Are you sure you want to delete this Course?</p>
      <button id="confirm-deletion">Yes</button>
      <button id="abort-deletion">No</button>
    </div>
    

    Javascript:

    $('#confirm-deletion').click(function() {
      // Send request here
    });
    

    【讨论】:

    • 这两个功能都需要preventDefault(),比如点击打开它然后点击实际删除记录?
    • 首先,我必须将 Martinas 的答案称为正确答案,因为她显然比我更了解 jQuery 对话框 API。但要回答您的问题:我认为您不需要任何preventDefault(),只要您不点击表单侧面的提交按钮。
    • 我制作了confirmation-delete按钮来在它下面发送AJAX请求,但是单击“是”后对话框不会自动关闭,我必须手动刷新页面。
    • 我再次参考 Martinas 的回答,按照她的建议去做。只需在$( this ).dialog( "close" ); 行之前的点击事件中添加您的 AJAX 请求
    • 我做到了,但它仍然无法在令人耳目一新的方面发挥作用。感谢您的帮助。我将不得不深入挖掘。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-26
    • 2015-03-14
    • 2020-04-06
    • 1970-01-01
    • 1970-01-01
    • 2017-12-31
    相关资源
    最近更新 更多