Предотвратить отправку диалогового окна jQuery дважды

Я хотел бы запретить пользователю отправлять диалоговую форму дважды.

Вот мой код подтверждения:

$('form', dialog).submit(function () {
    if (dialogSubmitted) { return false; }
    dialogSubmitted = true;
    ...
    ...
});

Где dialogSubmitted - это переменная, указывающая, отправлена ​​ли уже форма. Проблема в том, что это не работает. Когда я открываю диалоговое окно и дважды нажимаю Enter, форма отправляется дважды.

Любая идея?

Благодарю.


ОБНОВИТЬ

Вот еще одна попытка, которая также не удалась, когда я быстро нажал клавишу ввода дважды:

    $('form', dialog).one('submit', function (evt) {

        evt.preventDefault();

        $(this).on('submit', function (evt) {
            evt.preventDefault();
        });

        $.post($(this).attr('action'), $(this).serialize(), function (data, status) {
            $('#my-modal').modal('hide');
            ...
            ...
        }).error(function (error, status, a, b) {
            $('.modal-body p.body').html(error.responseText);
            writeError('msgError', pStopIndex.validationFailed);
        });

        // Unbind form submitting
        $('form', dialog).unbind();
        return false;
    });

Как видите, я делаю пост Ajax (вместо классической формы отправки). Может проблема в этом?

Вот захват следов от Google Chrome:

Мы видим, что есть 2 сообщения. Встречается только тогда, когда я дважды быстро нажимаю клавишу ввода или дважды быстро нажимаю кнопку отправки.

Любая идея? Благодарю.

1 ответ

Решение

Просто используйте one() метод

см. пример скрипки: http://jsfiddle.net/MpBCL/

$('form', dialog).one('submit', function (evt) {

    /* prevent default action */
    evt.preventDefault();

    ...
    /* code to be executed once */
    ...

    /**
     * disable default action (this handler will be attached after first 
     * submit event and it will prevent any further submit action
     */
    $(this).on('submit', function (evt) {
       evt.preventDefault();
    });

});

дополнительная ссылка: http://api.jquery.com/one/

Описание: Присоединить обработчик к событию для элементов. Обработчик выполняется не более одного раза для каждого элемента.

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