使用Bootbox确认,在哪里放置preventDefault?

问题描述 投票:0回答:1

我有一个基本的网页,MVC与jQuery和Bootbox,当用户点击删除链接我想显示一个确认框,是 - 或 - 否,然后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函数总是在回调执行之前退出!那是我的问题,正在修复......

jquery bootbox
1个回答
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!

© www.soinside.com 2019 - 2024. All rights reserved.