1

我想防止用户两次提交对话框表单。

这是我的提交代码:

$('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个帖子。仅当我快速按两次 Enter 键或快速单击两次提交按钮时才会发生。

任何想法?谢谢。

4

1 回答 1

4

只用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/

描述: 将处理程序附加到元素的事件。每个元素最多执行一次处理程序。

于 2012-04-26T11:27:01.960 回答