jQuery: обработчик событий, запрещающий другие обработчики событий - PullRequest
0 голосов
/ 05 ноября 2019

В настоящее время в моем проекте есть некоторые проблемы с отправкой 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'); никак не влияет - что странно, потому что сначала я должен был реализовать это, чтобыбыть в состоянии отправить форму.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...