jQuery: Прекратить отправку формы, выполнить скрипт, продолжить отправку формы? - PullRequest
19 голосов
/ 24 мая 2011

У меня есть форма, и когда я отправляю его, я выполняю несколько сценариев.Вот мой код:

$("#RequestCreateForm").submit(function (e) {
    if ($("#RequestCreateForm").validate().checkForm() == false) { return; }

    e.preventDefault();

    //many scripts

    //How to continue submitting?
}

Можно ли продолжить отправку формы (с остановкой на e.preventDefault();) после //many scripts?

Спасибо

Ответы [ 8 ]

25 голосов
/ 22 ноября 2012

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

$("#RequestCreateForm").on('submit', function (e) {
    e.preventDefault();
    // do some stuff, and if it's okay:
    $(this).off('submit').submit();
});

Последняя строка должна быть в условном выражении, в противном случае это всегда будет происходить и сводит на нет ваш e.preventDefault(); в верхней части.

17 голосов
/ 24 мая 2011

$("#RequestCreateForm").submit(function (e) {
    if ($("#RequestCreateForm").validate().checkForm() === false) { 
       e.preventDefault(); 
       //form was NOT ok - optionally add some error script in here

       return false; //for old browsers 
    } else{
       //form was OK - you can add some pre-send script in here
    }

    //$(this).submit(); 
    //you don't have to submit manually if you didn't prevent the default event before
}
6 голосов
/ 24 мая 2011
$("#RequestCreateForm").submit(function (e) {
    if ($("#RequestCreateForm").validate().checkForm() == false) 
    { 
         e.preventDefault();
         return false; 
    }        

    //other scripts

}
1 голос
/ 01 февраля 2017
$("#RequestCreateForm").submit(function (e) {
    if ($("#RequestCreateForm").validate().checkForm() == false) { return; }

    e.preventDefault();

    //many scripts

    // Bypass the jquery form object submit and use the more basic vanilla
    // javascript form object submit

    $("#RequestCreateForm")[0].submit();

}
0 голосов
/ 31 декабря 2013

Вот мой подход, чтобы избежать бесконечного цикла.

  • В форме я использую «кнопку» с идентификатором (например, <input type="button" id="submit" value="submit"/>) для имитации кнопки отправки;
  • В скрипте у меня есть что-то вроде этого:
$('#submit').click(function() {
  if(//validation rules is ok)
  {
      $("#RequestCreateForm").submit(); //assuming the form id is #RequestCreateForm
  }
  else
  {
      return false;
  }
});
0 голосов
/ 01 августа 2013

Все решения здесь слишком сложны или приводят к ошибке javascript, проще и яснее решение, которое я предполагаю:

jQuery("#formid").submit(function(e) {
        if( ! (/*check form*/)  ){  //notice the "!"
          e.preventDefault();
          //a bit of your code
        } //else do nothing, form will submit
}); 
0 голосов
/ 21 марта 2013

Чтобы избежать циклов отправки, следует использовать дополнительную переменную.

var codeExecuted = false;
$('#RequestCreateForm').submit(function(e) {
    ...
    if(!codeExecuted){
        e.preventDefault();
        ...
        functionExecuted = true;
        $(this).trigger('submit');
    }
});
0 голосов
/ 24 мая 2011

возвращение;то же самое, что e.preventDefault ();

try

$("#RequestCreateForm").trigger('submit');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...