2012-04-22 78 views
0

我對我的輸入框從javascript-coder使用javascript驗證,它在我的非ajax頁面上正常工作,但是當我使用ajax輸入POST時,即使驗證失敗,腳本也不會停止運行。我嘗試了一個here的例子,但是當我嘗試這個建議時,驗證根本不起作用。在我的AJAX腳本,我可以搞定一切由發佈數據之前,簡單地把這個與jQuery驗證工作:驗證失敗後腳本不會停止

var frm = $(this).closest('form');   
     if($(frm).valid()){ 

但我真的想堅持這個驗證庫,所以我希望有人在社會上更熟悉的JavaScript甚至可能這個驗證庫可以幫助我找到一個等價物,因爲在將所有ajax腳本向前移動之前,我無法在所有文檔中找到任何可以測試驗證是否失敗的文檔。

我的形式:

<form method="post" name="send_message_frm" id="send_message_frm"> 
     <div style="margin-top:20px;"></div> 
     <fieldset> 
      <div class="clear"></div> 
      <div style="margin-top:20px;"></div> 
      <label>Product Group Name:</label> 
      <input name="desc" class="text-input medium3-input required" type="text" id="desc" value=""> 
      <div style="color:red;" id='send_message_frm_desc_errorloc' ></div> 
      <div style="margin-top:20px;"></div> 
     </fieldset> 
     <input name="user" class="text-input medium3-input" type="hidden" id="user" value="<?php echo $myid ; ?>"> 
     <div style="margin-top:20px;"></div> 
     <input type="submit" id="send-message" name="submit" value="Send" class='button' /> 
     <div style="margin-top:20px;"></div> 
     </form> 
<script type="text/javascript"> 


    var frmvalidator = new Validator("send_message_frm"); 
    frmvalidator.EnableOnPageErrorDisplay(); 
    frmvalidator.EnableMsgsTogether(); 
    frmvalidator.addValidation("desc","alnum","Only numbers and letters are allowed"); 
    frmvalidator.addValidation("desc","req","Please enter a description"); 


</script> 

我的Ajax腳本:

<script type="text/javascript"> 

$(document).ready(function(){ 
    //Validate form....what can I put here to test if validation is completed properly???? 

    //onclick handler send message btn 
    $("#send-message").click(function(){ 
     $(this).closest('form').submit(function(){ 
      return false; 
     }); 
     var frm = $(this).closest('form');   

      $("#ajax-loading").show(); 
      var data = $(frm).serialize(); 
      $(frm).find('textarea,select,input').attr('disabled', 'disabled');    
      $.post( 
        "productgroup_add.php", 
        data, 
        function(data){ 
         $("#ajax-loading").hide(); 
         $(frm).find('textarea,select,input').removeAttr('disabled'); 
         $("#send_message_frm").prepend(data); 
        } 
      ); 
     } 
    ); 
    }); 
</script> 

回答

1

審查驗證腳本後,我發現(涉嫌),它重視的驗證方法,以表單的onsubmit事件處理程序,這聽起來是正確的...

this.formobj.onsubmit = form_submit_handler; 

但是...它也附加到米對象:

this.formobj.validatorobj = this; 

其中有你可以打電話驗證表單的方法:

if (!this.runAddnlValidations()) 

要運行的驗證,它看起來像你可以這樣做:

if(!document.forms[0].validatorobj.runAddnlValidations()) return; 
+0

工作就像一個魅力!謝謝! – 2012-04-22 04:25:16

+0

好吧,我跳了槍。顯然我不知道我在做什麼。所以我試圖把if(!form_submit_handler())返回;在我的ajax函數之前,但所有這些都導致函數失敗。我嘗試了幾種變體來嘗試使用if(!form_submit_handler())來給我一個關於驗證是否成功的布爾型回答,但是我正在超級丟失。我很滿意PHP,但在JavaScript上無能爲力,所以你可以擴展你自己運行事件處理程序的意義嗎?我在哪裏放置什麼?我應該在我的驗證後放置一些東西,看它是否通過? – 2012-04-22 05:23:52

+0

@DevNewb - 很難知道哪裏出了問題,但我用另一種方法更新了我的答案。希望它能解決問題。 – 2012-04-22 05:42:24