2013-03-23 2 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

+0

Кажется, это не работает для меня. Любая идея почему? – SeanWM

+0

В этом случае переместите проверку на нажатие кнопки и на подтверждение проверки, затем отправьте форму. –

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, чтобы не обрабатывать данные, если это не подтверждено. В противном случае данные были проверены и обработаны уже, а затем просто перезагрузили страницу.

Смежные вопросы