2013-07-02 2 views
1

Существует довольно сложная форма php POST с большим количеством проверки данных с использованием jQuery, как показано ниже. Тем не менее, я сталкиваюсь с некоторыми проблемами, потому что кажется, что форма отправляется до того, как будет завершена проверка.jQuery form validation too long on submit

Вопрос: Возможно ли, чтобы проверка прошла так долго, что форма отправлена ​​по умолчанию, прежде чем jQuery даже вернёт true или false? Если да, то каков наилучший способ справиться с этим?

jQuery('#order-form').submit(function(){ 

// Validate many different fields in various ways 

if (valid) 
    return true; 
else 
    return false; 

}); 
+0

Как долго длится _so long_? Обычно нежелательное представление происходит, когда в коде присутствует ошибка. – undefined

+0

Вы отправляете форму через ajax? – wakqasahmed

+0

Можете ли вы опубликовать реальный код, в частности 'if (valid)' part - я хочу посмотреть, как он проверяется. Я не думаю, что возможно, что так долго заканчивается, что он отправляется в любом случае. – Drahcir

ответ

0

Поскольку мы не можем видеть ваш код и как он проверяется, возможно, вы сможете попробовать свою функцию по-другому. Попробуйте использовать функцию щелчка на кнопке отправки, чтобы проверить свои позиции, а затем, если все будет хорошо, отправьте.

например.

$('#btn1').click(function(e){ 
    var valid 

    if($('#ex1').val() == ""){ 
     valid = false; 
    }else{ 
     valid = true; 
    } 

    if(valid){ 
     $("#testform").submit(); 
    }else{ 
     alert("not validated"); 
    } 

    e.preventDefault(); 
}); 

См. Скрипку в качестве примера.

http://jsfiddle.net/em62Z/1/

Также я использую этот плагин для проверки моих форм. Он может проверять любую размерную форму и даже некоторые сложные поля.

https://github.com/posabsolute/jQuery-Validation-Engine

Он хорошо работает и может сохранить ваши проблемы, делая свою собственную проверку, если вы делаете свой собственный.

0

Вот фрагмент кода в качестве примера для контактной формы, которые могут помочь вам, я использовал плагин jqueryvalidation.org и форма проводки с использованием Ajax

$(function() { 

     var form = $("#contact_form").validate(); 

     $('#progressbar').hide();  
     $('#success').hide(); 
     $('#failure').hide(); 

    $(document).ajaxStart(function() { 
     $("#progressbar").show(); 
    }); 
    $(document).ajaxStop(function() { 
     $("#progressbar").hide(); 
    }); 


    $("form#contact_form").submit(function() { 
     if(form.valid()) 
     { 
      //any other validations here 

      var name = $("#txtName").val(); 
      var email = $("#txtEmail").val(); 
      var phone = $("#txtPhone").val(); 
      var message = $("#txtMessage").val(); 

      $.ajax({ 
      url: "process_contact.php", 
      type: "POST", 
      data: {'name': name, 
        'email': email, 
        'phone': phone, 
        'message': message}, 
      dataType: "json", 
      success: function(data) { 
        if(data.status == 'success') 
        { 
         $('#contact_form').hide();         
         $('#success').show(); 
        } 
        else if(data.status == 'error') 
        { 
         $('#failure').show(); 
        } 
       } 

     }); 
     return false; 
     } 
    }); 
    }); 
0

Насколько я знаю, только два условия, что ваш случай может случиться:

  1. есть ошибка в коде Validation, либо
  2. Javascript выключен.

Что касается проверки на стороне клиента, вы испробовали проверку jQuery? Это проверить каждые элементы в форме на двух событиях:

  1. Everytime элементы меняются, и
  2. при отправке формы.

Вы также можете добавить собственный метод для выполнения уникальной проверки для каждого условия в каждом элементе.

Для получения дополнительной информации и примеров (с и без ajax) относительно jquery Validation: here.