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');