首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在PHP或JavaScript中防止多次点击提交多个表单

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

Stack Overflow用户
提问于 2017-10-23 16:12:00
回答 5查看 3.5K关注 0票数 2

我想防止在多次点击时提交多个表单。

我实际上是想把数据插入到数据库中。这个过程需要一点时间,比如2-3秒。

问题是,在2-3秒内,访问者可以点击该按钮大约6-7次,它会一遍又一遍地运行脚本。

我怎样才能防止它呢?

我试过这段代码:

代码语言:javascript
复制
<!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>
EN

回答 5

Stack Overflow用户

发布于 2017-10-23 16:58:23

您可以在表单提交过程中禁用提交按钮,就像this.So一样,该按钮将一直禁用,直到表单提交完成。

首先,为您的提交button.for示例id="myButton"提供一个id

代码语言:javascript
复制
<input type="submit" value="Submit" id="myButton" />

onsubmit="document.getElementById('myButton').disabled=true;
document.getElementById('myButton').value='Submitting, please wait...';"

该表单将为

代码语言:javascript
复制
<form action="test.php" method="post"
onsubmit="document.getElementById('myButton').disabled=true;
document.getElementById('myButton').value='Submitting, please wait...';"
>
票数 1
EN

Stack Overflow用户

发布于 2017-10-23 16:18:40

我认为最简单的方法是通过ajax发送表单,并关闭按钮,直到你得到响应。

代码语言:javascript
复制
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秒后到来,他仍然可以发送另一个表单,而他不应该这样做

票数 0
EN

Stack Overflow用户

发布于 2017-10-23 16:21:12

单击javascript后,禁用该按钮。如果使用ajax提交表单,则在用户提交和收到响应时使用标志,更改标志。请参阅下面的代码

代码语言:javascript
复制
var processFlag = false
$('form').submit(function(e){
  e.preventDefault()
  if(processFlag === true){
    return;
  }
  processFlag = true
  $.ajax({
  //your settings
  })
  .done(function(){
    processFlag = false
  })
})

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46884667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档