【问题标题】:SweetAlert with Java ServletSweetAlert 与 Java Servlet
【发布时间】:2017-01-25 09:39:14
【问题描述】:

我想暂停表单的 onsubmit,以便在继续之前要求用户确认操作。 所以这是我的表格:

            <form action="<%= request.getContextPath()%>/Controller" 
                  method="POST" id="remove_book" 
                  onsubmit="alertBookInfo('return_book')">
            </form>

然后,我使用 SweetAlert 创建了 JavaScript 函数:

function alertInfo(action) {
document.querySelector(action).addEventListener('submit', function (e) {
    var form = this;
    e.preventDefault();
    if (action === "remove_book") {
        swal({
            title: "Remove book?",
            text: "Watch out",
            type: "warning",
            showCancelButton: true,
            confirmButtonColor: "#DD6B55",
            confirmButtonText: "Yes.",
            cancelButtonText: "No.",
            closeOnConfirm: false,
            closeOnCancel: false
        },
        function (isConfirm) {
            if (isConfirm) {
                swal({
                    title: "Deleted.",
                    text: "Done.",
                    type: "success"
                }, function () {
                            form.submit();
                });
            } else {
                swal("Cancelled", "Not done.", "error");
            }
        });
    }
});
}

但由于某种原因,我无法阻止表单提交时重新加载页面。我做错了吗?

PS:我已经尝试在表单中使用 return alertInfo() 并从 JS 函数返回布尔值,但没有成功。

【问题讨论】:

  • 你的函数alertBookInfo('return_book')在哪里?
  • 在我的文件“functions.js”中,正确链接。

标签: javascript java jquery html sweetalert


【解决方案1】:

为什么不像这样从表单中调用函数,在提交表单之前会提示警报:

HTML

<form action="<%= request.getContextPath()%>/Controller" method="GET" id="remove_book" onclick="myAlertFunction(event)">
  <input type="submit">
</form>

JavaScript

function myAlertFunction(event) {
  event.preventDefault()
  swal({
      title: "Remove book?",
      text: "Watch out",
      type: "warning",
      showCancelButton: true,
      confirmButtonColor: "#DD6B55",
      confirmButtonText: "Yes.",
      cancelButtonText: "No.",
      closeOnConfirm: false,
      closeOnCancel: false
    },
    function(isConfirm) {
      if (isConfirm) {
        swal({
          title: "Deleted.",
          text: "Done.",
          type: "success"
        }, function() {
          $("#remove_book").submit();
        });
      } else {
        swal("Cancelled", "Not done.", "error");
      }
    });
}

如果你想防止重新加载,你可以随时使用event.preventDefault()

这里是一个例子:JSFiddel

【讨论】:

  • 这就是我想要做的:我已经在我的函数中调用了 event.preventDefault() 但由于某种原因它没有按应有的方式工作。我想使用 SweetAlert 是因为他们有漂亮的界面。
  • @pietrochico 检查我更新的代码和工作的 JSFiddle。
  • Id 不提交表单,即使我按下确定按钮 :')
  • 只有在您选择删除图书时才会提交
  • 仍未提交:/
【解决方案2】:

如果您不想重新加载页面,您可以使用 AJAX 调用。当您使用 submit() 时,您将始终重新加载页面,因为这是 submit 的工作原理。

$.ajax({
        method: "POST",
        url: YOUR_ACTION_URL,
        data: $('form').serialize(),
        success: function(data){
            //here you could add swal to give feedback to the user
        }
    });

在您的控制器中,您必须将方法定义为生成 JSON,如果您使用的是 Spring,则注释是 @ResponseBody

【讨论】:

  • 谢谢。我知道我可以使用 AJAX,但我不想:从 HTTPRequest 更改 AJAX 请求会迫使我在项目中更改太​​多东西,所以我希望我不能使用它。
  • 我了解您的需求,但恐怕无法使用表格,也可以在此处查看此帖子stackoverflow.com/questions/18169933/…
  • 所以我只能显示一个通知用户页面更改的警报,所以:
    而且,该功能将是您向我展示的功能,对?
  • 是的,你可以添加这个功能,然后你将拥有表单的全部控制权,所以不再重新加载,然后你可以将所有表单数据发送到控制器并由 JS 处理响应并显示您需要给用户的消息。还要记住将按钮类型从提交更改为按钮
  • 谢谢。非常。顺便说一句,标准警报如何阻止页面重新加载?
猜你喜欢
  • 1970-01-01
  • 2014-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-09
相关资源
最近更新 更多