Возврат значения beforeunload при сбое отправки формы

Чтобы хорошо объяснить мой вопрос, я хочу добиться поведения, которое заключается в выключении window.beforeunload, когда я нажимаю кнопку подтверждения, но когда форма не прошла валидацию, я хочу снова включить window.beforeunload. Заранее спасибо за помощь! Это мой код:

var Form = (function() {
    var formSubmitting = false;
    var formId = null;

    function onBeforeUnload(e) {
        if (formSubmitting) {
            return undefined;
        }

        if ($(formId).find('.changed-input').length || $(formId).find('.has-error').length) {
            return 'Are you sure you want to discard all changes?';
        }
    }

    function setForm(form) {
        formId = form;
    }

    $(window).on('beforeunload', onBeforeUnload);

    return {
        attachEvents: function (form) {
            setForm(form);

            $(form).on('change keyup keydown', 'input, textarea, select', function (e) {
                $(this).addClass('changed-input');
            });

            $(form).find(':submit').on('click', function (e) {
                // flag to turn off the beforeunload event
                formSubmitting = true;
            })
        }
    }
})();

0 ответов

Другие вопросы по тегам