2013-06-21 29 views
0

我有一个表单弹出确认对话框(您是否想继续),现在它弹出,但表单正在同时发送给我的控制器,它开始无论你点击是或否,处理。如何在显示/选择javascript确认后暂停表单提交。确认暂停表单提交,直到Ok出现

@using (Html.BeginForm("Process", "Home", FormMethod.Post, 
new { id ="MyForm" })) { 
    @Html.TextBoxFor(m => m.Name); 
    // other form controls... 
    <input id="Submit" type="submit" value="Apply Changes" /> 
} 

的javascript:(使用jquery-UI)

$(function() { 
     $("#Confirm").dialog({ 
      autoOpen: false, 
      buttons: { 
       "Ok": function() { 
        $(this).dialog("close"); 
        $('#MyForm').submit(); 
        return true; 
       }, 
       Cancel: function() { 
        $(this).dialog("close"); 
        event.preventDefault(); 
        return false; 
       } 
      } 
     }); 

     $("#Submit").click(function() { 
      $("#Confirm").dialog("open"); 
     }); 
    }); 

回答

4

立即防止默认动作,然后按ok按钮触发提交。

$(function() { 
    $("#Confirm").dialog({ 
     autoOpen: false, 
     buttons: { 
      "Ok": function() { 
       $(this).dialog("close"); 
       $('#MyForm')[0].submit(); 
      }, 
      Cancel: function() { 
       $(this).dialog("close"); 
      } 
     } 
    }); 

    $("#MyForm").submit(function (e) { 
     e.preventDefault(); 
     $("#Confirm").dialog("open"); 
    }); 
}); 
+0

虽然这会工作,为什么还要有一个提交按钮,如果你只是带走提交按钮的功能? – Rob

+0

这不会消除提交按钮的功能吗?这样做*保留*默认行为,方法是通过按下输入按钮或单击提交按钮来提交表单,两者都会得到一个确认对话框。如果您使用按钮单击来完成该工作,则在输入上按Enter将绕过确认对话框。 –

+0

确实如此,您可以调用e.preventDefault()来取消事件并提交表单。那么你只需打开模式?为什么不用常规按钮打开模式,如果用户点击“确定”,则使用$('#MyForm')。submit()提交表单。 – Rob

2

移动submit按钮的形式的外部,并且其改变为常规<input type="button"/>

您的模式“OK”功能会为您提交,因此您不需要在表单中提交按钮。

@using (Html.BeginForm("Process", "Home", FormMethod.Post, 
new { id ="MyForm" })) { 
    @Html.TextBoxFor(m => m.Name); 
    // other form controls... 

} 
<input id="Submit" type="button" value="Apply Changes" /> 
0

您还可以使用窗体本身的“的onsubmit”事件,并返回要么truefalse如果你想让它实际上提交数据或没有。