单击后禁用提交按钮并保持POST / REDIRECT / GET工作

时间:2013-04-03 12:19:44

标签: php javascript jquery forms submit

我使用POST / REDIRECT / GET技巧来阻止表单的刷新重发。 现在我想禁用不应单击两次的表单提交按钮(单击后)。 虽然我尝试了所有我发现的javascript示例,但它们都与POST / REDIRECT / GET冲突。 在大多数情况下,它甚至不提交,只是重定向到自己。 有解决方案吗谢谢你的帮助。

我尝试过的东西和冲突就是这个例子:

脚本首先运行headers.php,其中包含:

if (isset($_POST['start-diff-scan']))
{
    $_SESSION['SCAN_START'] = true;

    header('HTTP/1.1 303 See Other');
    header('Location: '.APP_URL.'scan.php');
    exit;
}

然后使用以下格式的scan.php:

<form name="start-diff-scan" id="start-diff-scan" method="post">
    <button
        name="start-scan"
        id="start-scan"
        value=""
        class="start-scan btn btn-primary"
        type="submit"
        method="post">
        Start New Scan
    </button>
</form>

并且工作正常。但是js技巧与此冲突。我在scan.php的最后添加了js代码

<script>
$('#start-diff-scan').submit(function()
{
    $('#start-scan').prop('disabled', true);
});
</script>

只会重定向到同一页面(scan.php)而不执行任何操作。 感谢所有yoru答案和帮助到目前为止这是伟大的。 任何想法都非常感谢

7 个答案:

答案 0 :(得分:1)

您不能以这种方式阻止它,因为它是用户端脚本,并且人们可以在发送表单之前轻松删除此代码。即使您禁用该按钮。在服务器端脚本中进行检查,无论请求是否已插入,因此您将显示错误或将其返回到页面

答案 1 :(得分:1)

$('#start-scan').attr("disabled", true);

应该工作

答案 2 :(得分:1)

如果“禁用”方法弄乱了你的代码而其他所有方法都失败了:

您可以尝试使用“加载程序gif”覆盖按钮,使其无法点击。

$('#start-scan').click(function()
{
    $('#start-scan').before('<div>LOADING</div>'); //Set the loading overlay width, height and background-color
});

答案 3 :(得分:1)

您遇到的问题是,当用户点击该按钮时,禁用此按钮并且不会触发点击操作。

添加setTimeout以延迟设置已禁用的属性。

其他选项是隐藏按钮并将其替换为提交的文本。

答案 4 :(得分:0)

$('#start-scan').attr('disabled', true);

或使用

.prop("disabled", true)

$('#start-scan').prop("disabled", true)

答案 5 :(得分:0)

您只需在表单中添加:

onClick="this.disabled=true"

答案 6 :(得分:0)

尝试prop()

$('#start-scan').prop('disabled', true);