2015-06-02 3 views
2

Мне нужно иметь возможность проверить форму в Parsley on submit, но отложить фактическое представление до тех пор, пока не будет выполнено какое-либо другое (синхронизированное) действие.Delay Parsley.js форма представления

Я попытался это:

$("#myform").on('submit', function(e){ 
    e.preventDefault(); 
    var form = $(this); 

    form.parsley().validate(); 

    if (form.parsley().isValid()){ 

     // do something here... 

     setTimeout(function() { 
      form.submit(); 
     }, 3000); 

    } 
}); 

Как вы можете догадаться, form.submit() просто посылает меня в бесконечный цикл. Я не могу определить, как инициировать отправку после задержки, не вызывая проверки. Чтобы было ясно, мне нужно:

  1. Проверьте форма действительна
  2. ли что-то не связаны
  3. Подождите X секунд
  4. Отправить форму

Есть идеи? Существует ли конкретный метод Parsley, который будет отправлять форму без повторной проверки?

ответ

0

В соответствии с this question после отмены действия (с preventDefault()), единственным вариантом является его запуск.

Вы уже это делаете. То, что вам нужно добавить в свою логику, - это условие того, следует ли остановить событие или нет. Вы могли бы использовать что-то вроде этого:

$(document).ready(function() { 
 
    $("form").parsley(); 
 

 
    // By default, we won't submit the form. 
 
    var submitForm = false; 
 

 
    $("#myform").on('submit', function(e) { 
 
    // If our variable is false, stop the default action. 
 
    // The first time 'submit' is triggered, we should prevent the default action 
 
    if (!submitForm) { 
 
     e.preventDefault(); 
 
    } 
 
    var form = $(this); 
 

 
    form.parsley().validate(); 
 

 
    // If the form is valid 
 
    if (form.parsley().isValid()) { 
 
     // Set the variable to true, so that when the 'submit' is triggered again, it doesn't 
 
     // prevent the default action 
 
     submitForm = true; 
 
     // do something here... 
 

 
     setTimeout(function() { 
 
     // Trigger form submit 
 
     form.submit(); 
 
     }, 3000); 
 

 
    } else { 
 
     // There could be times when the form is valid and then becames invalid. In these cases, 
 
     // set the variable to false again. 
 
     submitForm = false; 
 
    } 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/parsley.js/2.0.7/parsley.min.js"></script> 
 
<form id="myform"> 
 
    <input type="text" name="field" required /> 
 
    <input type="submit" /> 
 
</form>

+1

Благодаря Milz, это эффективно, что я сделал. Я не был уверен, есть ли внутренний метод для передачи через событие отправки, но это не так, поэтому я отмечаю это как принятое, так как оно решает проблему. – delinear

0

Я активно работает над обновлением, которое будет обрабатывать обещания, так что вы хотите достичь будет очень легко сделать.

А пока это сложнее. Я думаю, что с версией remote, вы можете отправить представить событие следующим образом:

$('.your-form').trigger($.extend($.Event('submit'), { parsley: true })) 
+0

Спасибо за обновление Marc, я обязательно буду следить за этим. – delinear

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