JQuery: прекратить отправку формы, выполнить script, продолжить отправку формы?

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

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

    e.preventDefault();

    //many scripts

    //How to continue submitting?
}

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

Спасибо

Ответы

Ответ 1


$("#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
}

Ответ 2

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

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

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

Ответ 3

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

    //other scripts

}

Ответ 4

$("#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();

}

Ответ 5

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

var codeExecuted = false;
$('#RequestCreateForm').submit(function(e) {
    ...
    if(!codeExecuted){
        e.preventDefault();
        ...
        functionExecuted = true;
        $(this).trigger('submit');
    }
});

Ответ 6

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

jQuery("#formid").submit(function(e) {
        if( ! (/*check form*/)  ){  //notice the "!"
          e.preventDefault();
          //a bit of your code
        } //else do nothing, form will submit
}); 

Ответ 7

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

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

Ответ 8

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

попробуйте

$("#RequestCreateForm").trigger('submit');