2015-06-21 42 views
-1
$(document).ready(function() { 
    $("#reg-username").keyup(checkusername); 
    $("#reg-password").keyup(checkpassword); 
    $("#email").keyup(checkemail); 
    $("#confirm-email").keyup(checkconfirmemail); 
    $("#register-day").keyup(checkday); 
    $("#register-month").change(disableselect).change(); 
    $("#register-years").keyup(checkyears); 
    $(document).click(function() { 
     $('#contact-form').submit(function(){ 
      checkusername(); 
      checkpassword(); 
      checkemail(); 
      checkconfirmemail(); 
      checkday(); 
      checkselect(); 
      checkyears(); 
      $("input[name='gender'").change(checkgender).change(); 
      if(!checkusername() || !checkpassword() || !checkemail() || !checkconfirmemail() || !checkday() || !checkselect() || !checkyears()){ 
      event.preventDefault(); 
      $("#othersubmit-result").css('color', 'red'); 
      $("#othersubmit-result").html('sumbit not requirements.'); 
      return false; 
      }else{ 
      $("#othersubmit-result").css('color', 'green'); 
      $("#othersubmit-result").html('sumbit passed.'); 
      return true; 
      } 
      }); 
     }); 
    }); 

我想提出一個驗證客戶端的形式,這是jQuery的,但如果形式不正確填寫和我按下提交它以某種方式掛起或推遲一點,像裝了一會兒,我猜我提交了太多的函數嗎?jQuery的預防提交延遲

我應該如何防止這種情況發生?

+0

是在客戶端或服務器端的所有那些檢查? – VladL

+0

checkusername(); checkpassword(); checkemail(); checkconfirmemail(); checkday(); checkselect(); checkyears(); 需要查看這些函數以瞭解有關延遲的更多信息。 – Paul

+0

在每個文檔的點擊,你要綁定一個新的表單提交結合了新的變化的事件,等等......不要做 –

回答

1

問題可能是您要多次綁定該事件。你的下面的代碼,

$(document).click(function() { 
    $('#contact-form').submit(function(){ 
     // ... Code Here ... 
    }); 
}); 

會附上提交的每點擊文檔時的事件處理程序。如果您在提交前單擊文檔10次,則當您提交表單時,將會附加並觸發10個提交事件處理程序。

如果在加載時存在的頁面上#contact-form,你可以簡單地將其更改爲:

$('#contact-form').submit(function(){ 
    // ... Code Here ... 
}); 

否則,你可以使用event delegation並將其更改爲:

$(document).on("submit", '#contact-form', function(){ 
    // ... Code Here ... 
}); 

而且, @AWolff指出,你有一個嵌套在提交事件中的.change事件。這同樣應該在document.ready函數自身:

$("input[name='gender'").change(checkgender).change(); 

在該行的選擇也有錯誤,應該有一個結尾括號:input[name='gender']

+0

不要忘記嵌套更改事件:) –

+0

@ A.Wolff哦!我甚至沒有注意到這一點。感謝您指出。我將它添加到答案中。 – Stryner

+0

謝謝,但它仍然延遲,如果我按了幾次,是正常的?或者我不應該把這麼多的功能提交?我喜歡提交部分。 – user3233074