使用Bootbox Confirm,在何处放置preventDefault?

时间:2019-03-06 21:10:53

标签: jquery bootbox

我有一个基本的网页,带有jQuery和Bootbox的MVC,当用户单击删除链接时,我想显示一个确认框,是-或-否,然后preventDefault或基于答案返回false。很简单的东西,但我似乎无法从BootBox捕获结果值。

HTML代码段

@Html.ActionLink("Delete", "Delete", new { id = item.UserDetailId }, 
                                                     new { @class = "delete_click", onclick = "return ConfirmDelete('" + item.Email + "');" })

JavaScript

var confirm_result = false;

function ConfirmDelete(message) {
  bootbox.confirm({
    message: "<h3>Delete this account:</h3> <span class=bold> " + message + " </span>",
    buttons: {
      cancel: {
        label: 'No'
      },
      confirm: {
        label: 'Yes'
      }
    },
    callback: function(result) {
      console.log('This was logged in the callback: ' + result);
      confirm_result = result;
    }
  });
  // ?? how do I control the true/false return value here ??
  return false;
};

一切正常,没有错误,显示对话框,调用了回调等;但是当用户单击“确定”时,confirm_result不会设置为true吗?

我需要将回调拆分为一个单独的函数吗?

更新:回调是异步的! ConfirmDelete函数始终在执行回调之前退出!那是我的问题,要进行修复....

1 个答案:

答案 0 :(得分:0)

我已经忘记了它是如何工作的,OnClick函数调用显示的BootBox对话框,然后然后立即退出。我从ConfirmDelete函数返回'false'以防止链接工作。要在用户单击“确定”时提交删除,我需要从回调内部进行重定向。更好的代码如下所示。

    function ConfirmDelete(name, id) {
        bootbox.confirm({
            message: "Delete this user: " + name + "?",
            buttons: {
                confirm: {
                    label: 'Yes'
                },
                cancel: {
                    label: 'No'
                }
            },
            callback: function (result) {
                if (result)
                {
                    var url = "Delete/" + id;
                    console.log("redirect to url:" + url);
                    window.location.href = url;
                }
                else
                { console.log("cancel delete"); }
            }
        });
        return false;
    };

请注意window.location.href调用,这是关键。像这样管理网页,管理后退按钮等还有其他问题;但这按预期工作。

AJAX是您的朋友,学习使用AJAX!