2012-07-03 146 views
22

我有一个表单并希望截取表单提交以显示使用bootbox的确认对话框。使用bootbox.confirm确认表单提交()

  1. 用户输入一些数据
  2. 用户点击提交
  3. 如果用户点击OK一个确认对话框显示

,然后将表格应提交,如果不应该仅仅停留在页。

我尝试这样做:

$('#myForm').submit(function() { 
    return bootbox.confirm("Are you sure?"); 
}); 

然而,bootbox.confirm()立即返回,确认对话框再次隐藏。

然后我发现在bootbox.confirm()上有一个回调参数。但是,如果我要从回调中调用$('#myForm').submit(),这显然会再次显示确认对话框。

那么确认表单提交的正确方法是什么?

+1

顺便说一句,改变提交按钮,一个普通的和附加脚本没有解决方案,因为用户仍然可以通过按回车来触发表单提交。 – theDmi

回答

37

我只能通过防止默认表单行为得到了这个工作,这里是下面的解决方案。 我在表单列表中使用它,每个表单都有一个提交删除按钮,它工作正常。

<script type="text/javascript"> 
    $('form').submit(function(e) { 
     var currentForm = this; 
     e.preventDefault(); 
     bootbox.confirm("Are you sure?", function(result) { 
      if (result) { 
       currentForm.submit(); 
      } 
     }); 
    }); 
</script> 
+3

为我工作,没有使用currentForm它陷入了无限循环,谢谢请帮助! – trueinViso

+0

不会再显示确认对话框,因为您正在调用'submit'并且没有检查'bootbox'? –

11

一如既往:就在你问一个问题之后,你自己找到了答案:-)。看到这个答案:https://stackoverflow.com/a/2420806/219187(也请注意答案中的评论)。

适应了我的问题,解决方法如下所示:

$('#myForm').submit(function() { 
    var currentForm = this; 
    bootbox.confirm("Are you sure?", function(result) { 
     if (result) { 
      currentForm.submit(); 
     } 
    }); 
}); 
+0

所以调用'currentForm.submit();'不执行jQuery代码'$('#myForm')。submit(function(){...'?? – ScottC

+0

不,似乎不是。对于一位JS专业人士来说,他不足以告诉你为什么:-)。 – theDmi

+3

$('#myForm')。submit(function(e){e.preventDefault(); ...必须添加preventDefault – Rahul

1

此代码的工作完美的我...

<script type="text/javascript"> 
$('#myForm').click(function(e) { 
    e.preventDefault(); 
    var msg = 'Souhaitez vous vraiment supprimer ce produit ?'; 
    bootbox.confirm(msg, function(result) { 
     if (result) { 
      $('#myForm').submit(); 
     } 
    }); 
}); 
</script> 
0

我的解决方案

@Html.ActionLink("Delete", "DeleteReport", new { id = item.Id }, new { @class = "btn btn-danger", onclick = String.Format("return ASE.ConfirmAction(this.href, 'Delete {0}?');", item.Name) }) 
var ASE = { 
    ConfirmAction: function (href, text) { 
     bootbox.confirm(text, function (result) { 
      if (result) 
       window.location = href; 
     }); 

     return false; 
    } 
} 
+0

'window.location'执行重定向,而不是表单提交。 – Alex