2012-05-28 60 views
2

我有一個HTML表單使用div(submitme)觸發下面的代碼.....代碼然後使用bValidator插件來驗證表單字段,然後檢查是否蜜罐字段在提交表單之前是空白的。當我排除「window.location ...」等等時,.submit()會工作併發布表單,但是當包含它時,驗證/蜜罐仍然有效,但沒有表單提交。重定向後.submit()表格

進出口新的jQuery和如果theres一些簡單的IM丟失或更好的方式來寫如下的在想:

$("#submitme").click(function(){ 
    if($('#right-body-div').data('bValidator').validate()) { 

     if ($("#honeypot").val() == "") { 
       $('#pgpost').submit(); 
       window.location = "http://www.homepage.co.uk/thankyou";  
       return true; 
       } 
      window.location = "http://www.homepage.co.uk/nothankyou"; 
      return false; 
    } 
}); 

如果可能的話我還想做到這一點,而無需使用AJAX/PHP的。

您的想法將不勝感激。

+0

理想情況下,你不會發布,然後重定向,你只需發佈。服務器應該以適當的響應回覆帖子。重定向不是必需的,因爲發佈行爲刷新到新頁面。你應該發佈到所需的目標頁面,並處理服務器端的帖子。 – David

回答

4
$('#pgpost').submit(function(e) { // this handles the submit event 
    if($('#right-body-div').data('bValidator').validate()) { 
     if ($("#honeypot").val() == "") { 
      /* 
      * url = $('#pgpost').val('action'); 
      * data = $('#pgpost').serialize(); 
      * $.post(url, data, function() { 
      *  window.location = "http://www.homepage.co.uk/thankyou"; 
      * }); 
      */ 
      window.location = "http://www.homepage.co.uk/thankyou"; 
     } 
     else { 
      window.location = "http://www.homepage.co.uk/nothankyou"; 
     } 
    } 

    e.preventDefault(); 
    return false; 
    /* 
    * the 2 lines above are meant to prevent the normal behaviour 
    * that the <form> would have (which is to submit via browser). 
    * 
    * e.preventDefault() is the jquery way prevent the normal behaviour 
    * return false is the legacy way to do it, you can use either or both 
    * 
    * the reason for which the code didn't validate your form is 
    * that e.prevenDefault() was only called inside the IF statement 
    * which means that it would only be called if the field was 
    * already in valid form. So basically if the form was invalid the normal 
    * behaviour is not prevented and the browser submits the form, if the form 
    * was valid the submit behaviour was prevented and the redirect was used. 
    * 
    */ 
}); 

$("#submitme").click(function(){ 
    $('#pgpost').submit(); // this triggers the submit event 
}); 

當通過JavaScript處理提交事件,您可以:

  • 防止正常的行爲總是(我們的情況下):
    • 時形式通過JavaScript是有效的,你submit the data,也許你之前對其進行處理提交;
    • 當表單無效時顯示錯誤信息;
  • 防止正常的行爲只有當表格無效
    • 當表單有效你讓正常的行爲(瀏覽器提交的數據);
    • 當表單無效時顯示錯誤信息;你的情況應該指出的蜜罐

錯誤消息不應該是空的。

這是有道理的,以防止正常的行爲,如果: - 你需要處理數據,然後發送到服務器(創造新的價值,不斷變化的現值; 未驗證); - 您需要避免頁面刷新,以便通過AJAX發送;

只是爲了驗證它是沒有意義的,以防止行爲,因爲你可以驗證,然後允許正常行爲繼續。

+0

感謝您的快速響應所有, 遵循Mihai的代碼,在第二個window.location中刪除「返回true」並添加「else」,表單現在提交併重定向,但現在每次都發布表單,即使字段無效 - 在我的原始代碼中,蜜罐/提交只能在字段有效(嵌套)時運行。 還有什麼建議嗎? (大衛感謝你的評論,我會研究你的建議,因爲必須學習如何編寫服務器端處理和回發等)。 – jclarke04

+0

感謝Mihai花時間重寫代碼和其他註釋......蜜罐/驗證現在可以正常工作,並阻止表單提交,重定向工作,根據蜜罐值將用戶發送到正確的頁面,然而,表單似乎沒有提交(PHP腳本處理表單並通過電子郵件發送到我的收件箱中沒有任何改變),所以只能假設它與.submit().....有什麼想法? – jclarke04

+0

我會更新我的答案來解釋。 –