2013-06-21 56 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如果你想讓它實際上提交數據或沒有。