2014-02-28 75 views
0

起初,我有這個和它的工作完美,但它提交即使有錯誤:爲什麼我的表單即使出現錯誤也會提交?

$(document).ready(function(){ 
     $('input[name=subdomain]').keyup(subdomain_check); 
     $('input[name=password]').keyup(password_strenght); 
     $('input[name=c_password]').keyup(password_check); 
     $('input[name=email]').keyup(email_check); 
    }); 

所以我改成這樣了,現在它不調用內部的功能!

$(document).submit(function(e){ 
    $('input[name=subdomain]').keyup(subdomain_check); 
    $('input[name=password]').keyup(password_strenght); 
    $('input[name=c_password]').keyup(password_check); 
    $('input[name=email]').keyup(email_check); 
    return false; 
}); 

這裏有什麼問題?
這是整個代碼:http://pastie.org/8812743

+1

刪除'返回false;' – Ani

+4

我認爲這個問題需要進一步澄清。 –

+0

這裏的信息不夠充分。定義什麼行不通,你可能得到的任何錯誤,這些功能的定義以及如何。那麼也許有人可以幫助你。還返回假;會導致提交功能無法執行。 – scrappedcola

回答

1

你是不是安裝了KEYUP事件處理程序直到發生提交事件。此時用戶已經完成了所有字段的輸入。

將呼叫轉移到$(...).keyup(...)回到dom ready事件。實際上,你需要一個額外事件處理程序來檢查用戶輸入:

$(document) 
    .ready(function(){ 
     $('input[name=subdomain]').keyup(subdomain_check); 
     $('input[name=password]').keyup(password_strenght); 
     $('input[name=c_password]').keyup(password_check); 
     $('input[name=email]').keyup(email_check); 
    }) 
    .submit(function(e) { 
     // validate input 
     // if invalid, show error message and call e.preventDefault(); 
    }); 

一般用戶的工作流程是:

  1. jQuery中的domready事件被調用時,附加keyup事件處理程序
  2. 的用戶鍵入表單域,觸發鍵盤處理程序
  3. 用戶提交表單,觸發提交處理程序
  4. 提交處理程序驗證表單輸入,如果無效,則向用戶顯示錯誤消息並阻止提交事件繼續。
0

不知道到底是什麼你的驗證函數返回,但如果它是一個布爾值,你可以,也許只是做這樣的事情:

$("#formId").submit(function(e){ 
    if(!subdomain_check() || !password_strenght() || !password_check() || !email_check()) { 
     e.preventDefault(); 
    } 
}); 
+1

我認爲這個答案指向了正確的方向。然而,你可能想糾正一些問題:它應該是'$('#formId')。submit(...)',你應該調用if語句中的函數,例如'subdomain_check()',等等 – Steve

+0

你對,編輯。 – MamaWalter

0
$(document).ready(function(){ 
     $('input[name=subdomain]').keyup(subdomain_check); 
     $('input[name=password]').keyup(password_strenght); 
     $('input[name=c_password]').keyup(password_check); 
     $('input[name=email]').keyup(email_check); 

     function subdomain_check (e) { 
     // these functions should set a global variable to false if validation fails 
     } 

     function password_strenght (e) { 
     // these functions should set a global variable to false if validation fails 
     } 

     function password_check (e) { 
     // these functions should set a global variable to false if validation fails 
     } 

     function email_check (e) { 
     // these functions should set a global variable to false if validation fails 
     } 

     $(document).submit(function(e){ 
      return global_var; // where global_var is the variable set by the validating functions 
     } 

    }); 
相關問題