3

我有一个提交按钮和以下代码,一旦单击它就会执行某些操作:

<input name="Update" class="LongSubmit" id="Update" type="submit" WaitingValue="Updating..." value="Update"/>

        $('.LongSubmit').click(function() {
            $(this).attr('disabled', 'disabled');
            $(this).addClass('AjaxInProgress');
            $(this).val($('.LongSubmit').attr('WaitingValue'));
            $(this).closest('form').submit(); // Added so it submits the form
        })

我发现当我添加这个没有注释行的处理程序时,表单没有被提交,所以我添加了它,现在表单确实被提交了。

但是,如果我单击提交按钮以通常在帖子中单击表单,则有 key Update,但是当我在单击处理程序中以编程方式执行此操作时,该 key 不存在。

如何处理提交按钮的单击事件而不影响表单的 POST(即update那里有密钥)?
(或者我怎样才能完全模仿它,就好像处理程序不在那里一样?)


正如 Zefiryn 指出的那样,这是因为禁用了按钮,但是我确实想这样做以防止多次点击。

4

3 回答 3

2

如果您不禁用提交按钮,则可以使用其他技术来阻止重复提交。例如:

var submitFlag = 0;
$(function(){
    $('form').submit(function(){
        return submitFlag++ == 0;
    });
});

这将阻止任何重复提交您的表单。该标志将在页面重新加载或回发时重置(如果您使用 Ajax,您可以扩展它以在 ajax 响应上重置此标志)。这可以帮助你吗?

于 2012-08-21T14:04:26.047 回答
1

我已经设法在 Zefiryn 的帮助下解决了这个问题,方法是仅在提交表单后禁用按钮:

    $(function() {

        $('.LongSubmit').click(function() {
            $(this).closest('form').submit();
            $(this).addClass('AjaxInProgress');
        })

        function DisableAjaxButtons() {
            $('.AjaxInProgress').val($('.AjaxInProgress').attr('WaitingValue'));
            $('.AjaxInProgress').attr('disabled', 'disabled');
        }

        $('form').submit(function() {
            setTimeout(DisableAjaxButtons, 1);
        })
    });

我仍然想看看是否有人对此(IMO)有任何想法,一些创建计时器的黑客解决方案只是在提交表单后发生。

于 2012-08-21T14:41:22.490 回答
0

密钥更新来自更新输入。它是提交按钮,但提交按钮总是与 POST 一起发送,所以我不知道问题出在哪里。如果您想从 POST 中删除此字段,您可以更改<input><button>(或任何其他标签)并在其上添加将提交表单的点击处理程序。

于 2012-08-21T10:27:48.333 回答