利用JS 阻止表單提交

情景一:不存在Ajax異步操做ajax

 1 使用背景:會議室預約管理系統中,當表單提交的時候須要驗證預定的時間是否符合預約規則(不須要經過訪問服務器),不然提示錯誤信息,阻止表單提交。服務器

 2 相關技術點:異步

form的兩個事件

  1. submit,提交表單,若是直接調用該函數,則直接提交表單
  2. onSubmit,提交按鈕點擊時先觸發,而後觸發submit事件。若是不加控制的話,默認返回true,所以表單總能提交。

3 Demo函數

頁面代碼:url

1 @using (Html.BeginForm(null, null, null, FormMethod.Post, new { onSubmit = "returncheck();" }))  // 注意:此處事件的寫法:onsubmit = "return + 事件名()"
2  { 
<input type="text" name="name"> 3 <input type="submit" value="提交"> 4 }

JS代碼:spa

function check(){
    if (document.testform.name.value=="admin")    {        
        alert("姓名不正確");        
        return false;    
        }
    else{
        return true;
        }
}

 

情景二:須要Ajax異步操做code

1 使用背景:會議室預約管理系統中,當表單提交的時候須要驗證預定的時間是否符合預約規則(須要經過訪問服務器數據判斷),不然提示錯誤信息,阻止表單提交。orm

 2 相關技術點: blog

在下面的例子中,經過onsubmit() 方法阻止提交無效的,由於,  JS 中 Ajax 部分與 其餘部分是異步進行的,或者說同時進行,代碼執行(過程A)1/5行後直接執行23行,與此同時(過程B)6/22行也在進行,顯然過程B的執行進度會慢,因此尚未等到判斷返回值,A就已經執行完畢,默認Str是true,因此ajax中的判斷是無效的。進程

示例:   Javascript代碼:

 1    $("#save").click(function mysubmit() {
 2             var str;
 3             var startime = $("#datetime1").val();
 4             var endtime = $("#datetime2").val();
 5             var num = $("#mark").val();
 6             $.ajax({
 7                 type: "POST",
 8                 url: "/MeettingRoom/meetting",
 9                 data: { strattime: startime, endtime: endtime, num: num },
10                 success: function (sesponseTest) {
11                     if (sesponseTest == "1") {
12                         str = false;                                           
13                         document.getElementById("metend").style.display = "block";
14 
15                     }
16                     else {
17                         str = true;                                          
18                         document.getElementById("metend").style.display = "none";                        
19                     }
20                 }
21 
22             });
23              return str;
24 
25         });   // 

 

<form onsubmit = "return check()"></form>

3 化解方法Demo:

Javascript代碼:

 1   <script>
 2         $("#save").click(function mysubmit() {
 3             var str;
 4             var startime = $("#datetime1").val();
 5             var endtime = $("#datetime2").val();
 6             var num = $("#mark").val();
 7             $.ajax({
 8                 type: "POST",
 9                 url: "/MeettingRoom/meetting",
10                 data: { strattime: startime, endtime: endtime, num: num },
11                 success: function (sesponseTest) {
12                     if (sesponseTest == "1") {
13                         str = false;                                           
14                         document.getElementById("metend").style.display = "block";
15                     }
16                     else {
17                         str = true;                                          
18                         document.getElementById("metend").style.display = "none";
19                         $("#form").submit(); // 將提交的進程放在判斷過程當中,被迫提交操做等待後臺訪問完畢後執行 20                     }
21                 }
22 
23             });
24 
25         });
26     </script>
  <button class="btn blue" type="button"  id ="save" ><i class="icon-ok"></i>保存</button>

2016/04/12  ------神奇的Javascript。

相關文章
相關標籤/搜索