В настоящее время в моем проекте есть некоторые проблемы с отправкой jQuery-форм.
Мой проект содержит общий код jQuery, который предотвращает двойную отправку форм (например, кто-то нажимает кнопку «Отправить» несколько раз).
//prevent multiple form submissions
jQuery.fn.preventDoubleSubmission = function () {
$(document).on('submit', this, function (e) {
let $form = $(this);
if ($form.data('submitted') === true) {
e.preventDefault();
} else {
$form.data('submitted', true);
}
});
return this;
};
$(function () {
$('form').preventDoubleSubmission();
});
Этот код включен в каждую отдельную страницу - поэтому каждая форма должна быть «защищена».
Для некоторых конкретных форм мне нужно проверить некоторые значения перед их отправкой - и показать поле подтверждения,если некоторые значения отсутствуют (например, Вы уверены, что хотите отправить эту форму без значения X?)
Вот код:
$(document).on('submit', 'form[name="article"]', function (e) {
e.preventDefault();
let form = this;
let $form = $(form);
let $category = $form.find('select#article_category'); //get category
if ($category.length && !$category.val()) { //check if category is selected
$.confirm({ //jquery confirm plugin
title: Are you sure?,
content: Value X is missing - continue?,
buttons: {
confirm: {
action: function () {
$form.off('submit');
form.submit();
}
}
}
});
} else {
$form.off('submit');
form.submit();
}
});
Таким образом, в основном, если пользователь пытается отправитьформы, но значение X отсутствует, сначала будет всплывающее окно Да / Нет - если значение существует, форма будет отправлена сразу.
Проблема: Когда я хочуЧтобы отправить форму, я звоню $form.off('submit');
, чтобы удалить обработчик события, а затем отправляю ее с form.submit();
. К сожалению, это также удаляет мой обработчик событий protectDoubleSubmission , который снова разрешает двойную отправку.
Есть ли простой способ исправить мою проблему? Спасибо
ОБНОВЛЕНИЕ 1: Я все еще борюсь с этой проблемой - кажется, что $form.off('submit');
никак не влияет - что странно, потому что сначала я должен был реализовать это, чтобыбыть в состоянии отправить форму.