2013-03-12 101 views
-1

我試圖用Ajax.I檢查與此代碼的每一行來驗證一個表單: 數據是傳遞給formValidate.php文件:禁用再啓用提交按鈕

$(document).ready(function(){ 
$("form").submit(function(event){ 
    stuId= $("input[name='stuId']").val(); 
    stuName= $("input[name='stuName']").val(); 
    stuDoB= $("input[name='stuDoB']").val(); 
    stuAdd= $("input[name='stuAdd']").val(); 

    $.get("formValidate.php?stuId="+stuId,function(data){ 
     $(".formCheck:eq(0) span").text(data); 
     $.get("formValidate.php?stuName="+stuName,function(data){ 
      $(".formCheck:eq(1) span").text(data); 
       $.get("formValidate.php?stuDoB="+stuDoB,function(data){ 
       $(".formCheck:eq(2) span").text(data); 
       $.get("formValidate.php?stuAdd="+stuAdd,function(data){ 
        $(".formCheck:eq(3) span").text(data); 
       }); 
      }); 
     }); 
    }); 
    event.preventDefault(); 
    for(var i=0;i<=3;i++) { 
     var a= $(".formCheck:eq("+i+") span").text(); 
     if(!a) 
      break; 
     if(i==3) 
      $("form").unbind('submit').submit(); 
    } 
     }); 
    }); 

在每一個檢查我將禁用提交按鈕。 最後,如果任何驗證跨度有任何文本,提交不會被綁定回來; 問題是我第一次點擊空白字段提交按鈕,沒關係,它顯示驗證。但是當我再次點擊提交按鈕時,當字段仍然是空白時提交表單。 我的問題是什麼?請幫助我?

+0

如果你正在處理一個簡單的表單[你應該提供它的標記],那麼每行的驗證調用是完全可以避免的。驗證表單客戶端,然後向服務器提供驗證規則。 – moonwave99 2013-03-13 00:02:21

+0

你有沒有嘗試觸發點擊事件提交按鈕,而不是提交evt? – jtheman 2013-03-13 00:03:26

+0

但我必須檢查輸入,如在數據庫中沒有相同的數據,我認爲Ajax對此很好 @jtheman我的表單有一個按鈕類型=提交 – 2013-03-13 00:04:11

回答

0

好的,首先這個驗證,你真的應該只是「櫻桃餡餅」。並幫助您實現更加用戶友好的形式。你真的應該考慮使用一些預定義的表單檢查庫。最後但並非最不重要的,總是在服務器端進行驗證。

解釋什麼是錯的,請看看這個的jsfiddle: http://jsfiddle.net/JLySr/

在文本每個小空間將允許/不允許你通過驗證。 所以首先驗證阿賈克斯後可能會被修邊的文本返回一個空間或類似的東西... 你可能一個悅目改善這一點:

var a= $(".formCheck:eq("+i+") span").text().trim(); 

但仍這是不是真正的驗證。正如你可能知道在客戶端刪除部分網頁非常容易。