Bootbox.js回调函数中的触发方式

Triggering method in callback function of Bootbox.js

伙计们,我有一个小问题,我正在做一个小的 spring 项目,在我的控制器中我有一个删除方法,我从我的 jsp 页面

调用
<a  onclick="return confirm('Are you sure ?');" href="${deleteUser}" >delete</a>

而且这个工作完美无缺,但它使用丑陋的默认确认对话框,我想让事情变得更有趣。所以我找到了 bootbox.js,并用它玩了一下。

虽然我可以显示对话框,但我找不到关于如何在 bootbox.js 的回调函数中调用方法的单一解释。

我添加了所有依赖项和这个脚本

  <script>
    $(document).on("click", ".alert", function(e) {
        bootbox.confirm({
            message: "Are you sure you want to delete this Account?",
            buttons: {
                confirm: {
                    label: 'Yes',
                    className: 'btn-success'
                },
                cancel: {
                    label: 'No',
                    className: 'btn-danger'
                }
            },
            callback: function (result) {
               if(result==true){
                 href="${deleteUser}
               }
            }
        });
    });
</script>

我也将 link 更改为:

<a  class="alert" >delete</a>

就是这样,出现对话框,我选择了选项但没有任何反应,我知道我做错了什么,但我尝试的每个选项似乎都让我远离正确答案,任何人都可以编辑我的第二部分代码,以便我了解这实际上是如何工作的。

提前谢谢大家

由于 Bootbox 无法阻止执行线程,您必须阻止 link 执行它的请求。有两种方法:添加一个preventDefault,或者return false from the click event:

$(document).on("click", ".alert", function(e) {

    // do this...
    e.preventDefault();

    bootbox.confirm({
        message: "Are you sure you want to delete this Account?",
        buttons: {
            confirm: {
                label: 'Yes',
                className: 'btn-success'
            },
            cancel: {
                label: 'No',
                className: 'btn-danger'
            }
        },
        callback: function (result) {
           if(result==true){
             href="${deleteUser}"
           }
        }
    });

    // ... OR this (you don't need both)
    return false;
});

一旦你有了它,你就可以使用 AJAX 调用来执行 link 通常会执行的操作:

$(document).on("click", ".alert", function(e) {

    // do this...
    e.preventDefault();

    bootbox.confirm({
        message: "Are you sure you want to delete this Account?",
        buttons: {
            confirm: {
                label: 'Yes',
                className: 'btn-success'
            },
            cancel: {
                label: 'No',
                className: 'btn-danger'
            }
        },
        callback: function (result) {
            if(result) {
                var url = "${deleteUser}";

                $.post(url)
                    .done(function(response, status, jqxhr){
                        // post successful - do something?
                    })
                    .fail(function(jqxhr, status, error){
                        // post failed
                    });
            }
        }
    });

    // ... OR this (you don't need both)
    return false;
});

我假设 ${deleteUser} 生成一个 URL,您的后端可以对其进行分解以获得删除正确记录所需的数据;如果没有,您需要向 $.post 函数添加一个数据对象。

我找到了解决问题的方法,

如下:

 <script>
$(document).on("click", "#alert", function(e) {
     var addressValue = $(this).attr("href");
    e.preventDefault();

    bootbox.confirm({
        message: "Are you sure you want to delete this Account?",
        buttons: {
            confirm: {
                label: 'Yes',
                className: 'btn-success'
            },
            cancel: {
                label: 'No',
                className: 'btn-danger'
            }
        },
        callback: function (result) {

                if(result==true){

                      window.location = addressValue;


                }

        }

    });
});

重要的是使用 var addressValue = $(this).attr("href");要获得点击的 href 的值,请使用 e.preventDefault();停止默认操作,如果结果== true,稍后在回调函数中调用addressValue。

我测试过,效果很好。 干杯