提交表单时禁用按钮的最简单方法是什么?

Mik*_*gan 20 javascript forms jquery

我一直试图找到"正确"的方法来防止双重提交表格.SO上有很多相关的帖子,但没有一个在我这里找到.下面两个问题.

这是我的表格

<form method="POST">
    <input type="text" name="q"/>
    <button class="once-only">Send</button>
</form>
Run Code Online (Sandbox Code Playgroud)

这是我第一次尝试禁用双提交:

$(document).ready(function(){
    $(".once-only").click(function(){
        this.disabled = true;
        return true;
    });
});
Run Code Online (Sandbox Code Playgroud)

这是这里建议的方法:使用JS/Jquery发布后禁用按钮.该帖子表明提交元素必须是输入而不是按钮,但测试两者没有区别.您可以使用这个小提琴自己尝试:http://jsfiddle.net/uT3hP/

如您所见,这会禁用该按钮,但也会阻止提交表单.在提交元素是按钮和输入元素的情况下.

问题1:为什么此单击处理程序停止提交表单?

搜索更多我找到这个解决方案(当我禁用提交按钮以防止双击时,为什么我的表单不发布?)

if($.data(this, 'clicked')){
    return false;
} else{
    $.data(this, 'clicked', true);
    return true;
}
Run Code Online (Sandbox Code Playgroud)

你可以用这个小提琴来玩这个:http://jsfiddle.net/uT3hP/1/

这确实有效,但......

问题2: 这是我们能做的最好的吗?

我认为这将是一件基本的事情.方法1不起作用,方法2不起作用,但我不喜欢它并且感觉必须有一种更简单的方法.

dsg*_*fin 28

你可以使用jQuery的submit().在这种情况下,它应该看起来像这样:

$('form').submit(function(){
    $(this).children('input[type=submit]').prop('disabled', true);
});
Run Code Online (Sandbox Code Playgroud)

这是一个有效的jsFiddle(由Mike制作) - http://jsfiddle.net/gKFLG/1/.

如果您的提交按钮是不是表单元素的直接孩子,你将需要更换children使用find.此外,您的提交按钮也可以是button元素而不是input元素.例如,如果您使用的是Bootstrap水平表单,则会出现这种情况.以下是该代码段的不同版本:

$('form').submit(function(){
    $(this).find('button[type=submit]').prop('disabled', true);
});
Run Code Online (Sandbox Code Playgroud)

演示jsFiddle - http://jsfiddle.net/devillers/fr7gmbcy/


Zia*_*Zia 21

简单有效的解决方案是

<form ... onsubmit="myButton.disabled = true; return true;">
    ...
    <input type="submit" name="myButton" value="Submit">
</form>
Run Code Online (Sandbox Code Playgroud)

来源:这里

  • 到目前为止,IMO 的最佳解决方案。它适用于验证,不需要任何外部库。 (3认同)
  • 使用简单有效! (2认同)
  • 不需要返回true; (2认同)