Отключение кнопки отправки после нажатия предотвратит отправку формы в Chrome

#javascript #jquery #submit

#javascript #jquery #Отправить

Вопрос:

Недавно я столкнулся, по крайней мере, для меня, с интересной ошибкой. Мы создали JS, который отключает кнопку отправки, если в форме нет ошибки проверки, Чтобы предотвратить отправку нескольких форм и т. Д. Это отлично работает в Firefox. Однако это никогда не будет работать в Chrome.

Это была моя логика для проверки формы и отключения кнопки, если все в порядке.

     $('body').on('click', "button[type='submit']", function (evt) {
        MessageBox.RemoveAllBoxes();

        if (!CustomDynamicValidation()) {

            //Something went wrong
            return false;
        }
        
        //Everything is ok. Disable button and send
        $(this).attr('disabled', true);
        return true;
    });

  

Это работает так, как и предполагалось для Firefox. Кнопка была отключена после нажатия, и форма была отправлена. В Chrome кнопка была отключена, но форма не была отправлена.

Ответ №1:

Я полагаю, что если я установлю disable в тайм-аут, он начнет работать даже в Chrome. Нравится:

     $('body').on('click', "button[type='submit']", function (evt) {
        var submitButton = $(this);

        MessageBox.RemoveAllBoxes();

        if (!CustomDynamicValidation()) {

            //Something went wrong
            return false;
        }
        
        //Everything is ok. Disable button and send
        setTimeout(function () { $(button).attr('disabled', true); }, 0);
        return true;
    });

  

Мой вопрос в том, почему это так? Почему для работы Chrome должен быть тайм-аут даже с нулевой задержкой? Возможно, есть более элегантное решение для этого?