Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
防止在PHP或JavaScript中多次单击时提交多个表单_Javascript_Php_Jquery - Fatal编程技术网

防止在PHP或JavaScript中多次单击时提交多个表单

防止在PHP或JavaScript中多次单击时提交多个表单,javascript,php,jquery,Javascript,Php,Jquery,我想防止多次单击时多次提交表单 我实际上想把数据插入数据库。这个过程需要一些时间,比如2-3秒 问题是,在2-3秒内,访问者可以点击该按钮6-7次,它会一遍又一遍地运行脚本 我怎样才能预防它 我尝试了以下代码: <!DOCTYPE html> <head> <title>My Form</title> </head> <body> <form action="process.php" met

我想防止多次单击时多次提交表单

我实际上想把数据插入数据库。这个过程需要一些时间,比如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>

我的表格

我认为最简单的方法是通过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.2秒,如果出现错误,用户应该能够重新发送表单
-用户连接速度慢,5秒后有响应,他仍然可以发送另一个表单,但他不应该在单击后用javascript禁用按钮。 如果使用ajax提交表单,则在用户提交表单时使用一个标志,并在收到响应时更改该标志。请参阅下面的代码

var processFlag=false
$('form')。提交(函数(e){
e、 预防默认值()
if(processFlag==true){
返回;
}
processFlag=true
$.ajax({
//你的设置
})
.done(函数(){
processFlag=false
})

})
您可以阻止用户界面,这样即使用户尝试单击“用户界面阻止”,一旦成功,也不会允许或取消阻止用户界面


我建议使用事件捕获表单提交(用户可以在字段上使用enter键提交事件),然后设置标志以防止重新提交,并禁用字段集以防止任何其他提交

var submitted=false;
document.querySelector(“#add form”).addEventListener('submit',函数(evt){
如果(已提交){
evt.preventDefault();
}否则{
提交=真实;
this.querySelector('fieldset').setAttribute('disabled','disabled');
}
});

我的表格

当表单提交正在进行时,您可以像这样禁用提交按钮。因此该按钮将被禁用,直到表单提交完成

首先,为提交按钮提供一个id。例如
id=“myButton”


onsubmit=“document.getElementById('myButton')。disabled=true;
document.getElementById('myButton')。value='正在提交,请稍候…'
表格将是

<form action="test.php" method="post"
onsubmit="document.getElementById('myButton').disabled=true;
document.getElementById('myButton').value='Submitting, please wait...';"
>


禁用按钮2/3秒我尝试过,但表单操作不起作用。。。!!!“照@Shree说的去做”可能是重复的,我已经在很多项目中这样做了,而且效果很好。
<form action="test.php" method="post"
onsubmit="document.getElementById('myButton').disabled=true;
document.getElementById('myButton').value='Submitting, please wait...';"
>