2013-03-23 71 views
1

我的表單的onsubmit被調用時,將表單提交:使用的onsubmit

onsubmit="validate(this); return false;" 

的validate()如下:

function validate(obj) { 
    $.ajax({ 
     url : "ajax/validate_check.php", 
     type : "POST", 
     data : $("#" + obj.id).serialize(), 
     success : function(data) { 
      $('#' + obj.id + ' :input.form_errors').removeClass('form_errors') 
      data = $.parseJSON(data); 
      if(data['error_count'] >= 1) { 
       $.each(data, function(i, item) { 
        $('#' + i).addClass('form_errors'); 
       }); 
      } else { 
       $('#' + obj.id).submit(); 
      } 
     } 
    }); 
} 

當我有0個錯誤它試圖提交表單,但我會變得無限循環。我意識到這是因爲我的onSubmit再次調用該函數。我準備好後如何提交表格?什麼是正確的方法來解決這個問題?

回答

1

您的驗證函數應根據錯誤返回true或false。

onsubmit = "return validate(this)" 

    function validate(obj){ 
    ... 
    if(data['error_count'] >= 1) { 
      $.each(data, function(i, item) { 
       $('#' + i).addClass('form_errors'); 
      }); 
      return false; //stop submitting 
     } else { 
      return true;//continue submitting 
     } 
    } 

雖然,因爲你正在使用jQuery:

 $("#formid").submit(function(){ 
      //your validation code 
    }); 

可能會更好。

查看this page瞭解更多詳情。有一個很好的例子。

+0

OP使用AJAX來驗證表單,所以這沒有幫助。 – zeroflagL 2013-03-23 17:39:03

+0

它似乎沒有爲我工作。任何想法爲什麼? – SeanWM 2013-03-23 17:44:36

+0

在這種情況下,將驗證移動到按鈕單擊和驗證成功,然後提交表單。 – 2013-03-23 17:50:23

0

您已經提交表單進行驗證。

} else {您不能再次提交它,因爲您注意到了。你應該調用一個函數來提交它whatever_process_the_validated_data.php

雖然我建議有相同的.php驗證和處理數據 - 每個類或函數。這樣,你可以:

$('.forms_that_need_validation').submit(function() { 
$.ajax({ 
    url : "ajax/data_validation_and_processing.php", 
    type : "POST", 
    data : $(this).serialize(), 
    success : function(data) { 
     $(this + ' :input.form_errors').removeClass('form_errors') 
     data = $.parseJSON(data); 
     if(data['error_count'] >= 1) { 
      $.each(data, function(i, item) { 
       $('#' + i).addClass('form_errors'); 
      }); 
     } else { 
      location.reload(); 
     } 
    } 
}); 
return false; 
}); 

會發生什麼,如果數據不能被驗證,則返回錯誤 - 你應該代碼,你.php爲了不處理數據,如果它不驗證。否則,數據已經過驗證和處理,然後它只是重新加載頁面。