我使用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答案和帮助到目前为止这是伟大的。 任何想法都非常感谢
答案 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);