我想防止在多次点击时提交多个表单。
我实际上是想把数据插入到数据库中。这个过程需要一点时间,比如2-3秒。
问题是,在2-3秒内,访问者可以点击该按钮大约6-7次,它会一遍又一遍地运行脚本。
我怎样才能防止它呢?
我试过这段代码:
<!DOCTYPE html>
<head>
<title>My Form</title>
</head>
<body>
<form action="process.php" method="post">
<input type="hidden" name="form_token" value="<?php echo $form_token; ?>" />
<div>
<label for="name">Name</label>
<input type="text" name="name" />
<div>
<div>
<input type="submit" value="Add Name" onclick="this.disabled=true;return true;" />
</div>
</form>
</body>
</html>发布于 2017-10-23 16:58:23
您可以在表单提交过程中禁用提交按钮,就像this.So一样,该按钮将一直禁用,直到表单提交完成。
首先,为您的提交button.for示例id="myButton"提供一个id
<input type="submit" value="Submit" id="myButton" />
onsubmit="document.getElementById('myButton').disabled=true;
document.getElementById('myButton').value='Submitting, please wait...';"该表单将为
<form action="test.php" method="post"
onsubmit="document.getElementById('myButton').disabled=true;
document.getElementById('myButton').value='Submitting, please wait...';"
>发布于 2017-10-23 16:18:40
我认为最简单的方法是通过ajax发送表单,并关闭按钮,直到你得到响应。
var submitted = false;
$('#your_form').submit(function(e) {
e.preventDefault();
if (submitted) {
return;
}
submitted = true;
$.post('your_url', $(this).serialize(), function() {
console.log('success');
submitted = false;
}, function() {
console.log('error');
submitted = false;
});
});这只是一个例子,你当然可以扩展它,显示一些弹出窗口,在成功后重新加载页面或其他任何东西。
我建议不要禁用按钮2-3秒。编程中的任何事情都应该基于实际的动作时间,而不是硬编码。你可以通过禁用按钮2-3秒来避免双击表单,但在情况下仍然很糟糕:-响应在0.2s内到来,如果有错误,用户应该能够重新发送表单-用户连接缓慢,响应在5秒后到来,他仍然可以发送另一个表单,而他不应该这样做
发布于 2017-10-23 16:21:12
单击javascript后,禁用该按钮。如果使用ajax提交表单,则在用户提交和收到响应时使用标志,更改标志。请参阅下面的代码
var processFlag = false
$('form').submit(function(e){
e.preventDefault()
if(processFlag === true){
return;
}
processFlag = true
$.ajax({
//your settings
})
.done(function(){
processFlag = false
})
})
https://stackoverflow.com/questions/46884667
复制相似问题