e.preventDefault()在与bootbox和jQuery.post()一起使用时不起作用

时间:2014-02-04 19:00:43

标签: javascript jquery html forms bootbox

我想要实现的目标是什么?

我有一个由JS控制的div,当单击一个菜单项时,它的高度会发生变化。因此,当单击菜单项时会出现div,当再次单击它时它会消失。

在这个div中我有一个表单,当提交表单时,将显示一条消息,询问用户是否确定要提交表单。如果他们回答是,表单提交并发送电子邮件。

如果用户拒绝,则消息将消失,允许用户进行更改。

问题

提交表单后,页面会因帖子而刷新。从而使div消失。

我的解决方案?

当用户说“是”时,使用jQuery.post()和e.preventDefault()发布表单。

这应该

  1. 停止表单刷新(因此表单中的div仍处于打开状态)
  2. 发布表单数据
  3. 代码

         $('#form1').submit(function(e) {
                var currentForm = this;
                e.preventDefault();
                 console.log("prevent default1");//Debug Line
                bootbox.confirm("Are you sure?", function(result) {
                    if (result) {
                        e.preventDefault();
                        console.log("prevent default2");//Debug Line
                          $.ajax({
                   type: 'POST',
                   url: 'indextest2.php',
                   data: $("#form1").serialize(),
                   error: function () {
                       console.log('Ajax Error');//Debug Line
                   }, 
                   success: function (response) {
                        console.log('Ajax Success'); //Debug Line
                            }
                        });
                    }
                }); 
            }); 
    

    发生了什么事?

    当用户对邮件说“是”时,表单仍在发布,导致刷新。

2 个答案:

答案 0 :(得分:2)

我认为您可以在return false;调用之后放置$.post(而不是e.preventDefault()之后(这是为了让bootbox等待发布结果)和return false;只是bootbox.confirm在{{1}}子句之后(对于不提交的表单)。 你可以调用你的成功方法bootbox.hideAll来发布后关闭bootbox。

答案 1 :(得分:0)

请在return false;

之后加e.preventDefault();
e.preventDefault();
return false;