2011-09-27 23 views
1

我有一個使用jQuery post提交表單並在同一頁面的div標記內返回數據的頁面。那麼表單仍然可以訪問,以便可以向用戶詢問多個問題,並從數據庫中獲取信息。帶單選按鈕檢查驗證的jQuery Post

如果用戶在未選擇單選按鈕的情況下嘗試提交表單,則會收到一個警告框,表示他們必須進行選擇。但是,在第一次通過用戶之後,可以在不做選擇的情況下提交表單。

單選按鈕保持其設定值。關於如何使用這種格式的任何想法,並確保每次連續的表單提交選擇一個單選按鈕?

這裏是第一頁test.php的

<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN"> 
    <html> 
    <head> 

    <title>test jQuery post</title> 
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.js"></script> 
    <script type="text/javascript" src="http://ajax.microsoft.com/ajax/jquery.validate/1.7/jquery.validate.min.js"></script> 

    <script type="text/javascript"> 
    //<![CDATA[ 
    jQuery.noConflict(); 

    jQuery(document).ready(function(){ 
     initializeForm(); 
     }); 

    function initializeForm() { 
     jQuery("#university").validate({ 

      debug: false, 
      submitHandler: function(form) { 


      var validationTypes = jQuery("#validationTypes"); 
      var valid = false; 


         if (validationTypes.val()== 'radio') 
          { 
           for(i=0; i<university.radio.length; i++) if(university.radio[i].checked) {valid=true;} 

           if (valid == false) 
             { 
              alert ("Please pick an answer before trying to Submit this form."); 
              return false; 
             } 

          } 


       jQuery.post('post.php', 
        jQuery("#university").serialize(), 
        function(data) { 
         jQuery('#box').html(data); 
         initializeForm(); 

        }); 

      } 

     }); 
     } 



    // ]]> 
    </script> 
    </head> 
    <body> 
    <div id="box"><? include('post.php') ?></div> 
    </body> 
    </html> 

這裏是第二頁post.php中

<? 

$radio = (isset($_POST['radio'])? $_POST['radio']: 0); 
    switch ($radio) 
     { 
      default: 
      echo 'pick a number<br /><br />'; 
      break; 
      case '1': 
      echo 'you pick one<br /><br />Pick Again<br /><br />'; 
      break; 
      case '2': 
      echo 'you pick two<br /><br />Pick Again<br /><br />'; 
      break; 
      case '3': 
      echo 'you pick three<br /><br />Pick Again<br /><br />'; 
      break; 
     } 
?> 
<form action="" method="POST" id="university" name="university"> 
<input type="radio" name="radio" value="1" /> 1&nbsp;&nbsp; 
<input type="radio" name="radio" value="2" /> 2&nbsp;&nbsp; 
<input type="radio" name="radio" value="3" /> 3&nbsp;&nbsp; 
<input type="hidden" name="validationTypes" id="validationTypes" value="radio"> 
<input type="submit" name="submit" value="submit" /></form> 
+0

你清理用戶提交後的形式? –

+0

在您的submitHandler中,我看不到在任何地方定義的「大學」。你的意思是使用'document.university'嗎?你得到任何JavaScript錯誤? – RoccoC5

+0

塞爾吉奧,我沒有清潔表格?在submision之後......不確定你的意思。 – simian

回答

1

我覺得你的事件處理程序驗證(jQuery("#university").validate)仍然連接到提交表單後您剛剛替換的HTML(jQuery('#box').html(data))。

因此,在這種情況下,我能想到的2個選擇,我認爲會解決您的問題:

  1. 簡單的解決方案:將你的JavaScript的這部分post.php中頁面內(所以它的執行每次加載窗體):

    jQuery(document).ready(function(){ 
        initializeForm(); 
    }); 
    
  2. 高性能的解決方案:將你的HTML在post.php中頁面下方關閉"box" div中的test.php頁面。然後使用一些清潔類的值:

    $('input[name=radio]').val([]);