0

我使用 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)而不执行任何操作。感谢您迄今为止的所有回答和帮助,这很棒。非常感谢任何想法

4

7 回答 7

1

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

于 2013-04-03T12:22:53.480 回答
1

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

应该管用

于 2013-04-03T12:25:54.747 回答
1

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

您可以尝试用“loader gif”覆盖按钮,使其不可点击。

$('#start-scan').click(function()
{
    $('#start-scan').before('<div>LOADING</div>'); //Set the loading overlay width, height and background-color
});
于 2013-04-03T12:26:49.857 回答
1

您遇到的问题是当人员单击时设置禁用会导致按钮被禁用并且单击操作不会触发。

添加一个 setTimeout 来延迟设置 disabled 属性。

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

于 2013-04-03T13:01:45.890 回答
0
$('#start-scan').attr('disabled', true);

或使用

.prop("disabled", true)

$('#start-scan').prop("disabled", true)
于 2013-04-03T12:22:01.713 回答
0

您可以将其添加到表单中:

onClick="this.disabled=true"
于 2013-04-03T12:22:41.247 回答
0

尝试prop()

$('#start-scan').prop('disabled', true);
于 2013-04-03T12:23:04.770 回答