2011-09-27 27 views
1

我有这种形式提交到work.phphtml表单按钮来停止多条提交

我想要做的是在提交表单时禁用提交按钮,然后在5秒左右后重新启用它,所以我没有得到多个帖子。

我该怎么做?

另外,如果我在其中一个文本框中按下回车键,而提交按钮不可点击,那么它会将我重定向到不想发生的work.php

<form method="post" action="work.php"> 
     <strong>Message:</strong> 
     <input type="text" id="message" name="message" class="message" /> 
     <input type="submit" id="submit" onClick="this.value='Processing form';this.disabled=true;if(Submitting()){this.form.submit()}else{this.value='Submit';this.disabled=false;}" value="Submit" /> 
</form> 
+2

什么是'Submitting()'函数? – Alex

回答

0

您不必担心这一点。如果用户以任何方式(单击提交或点击回车)对表单提交进行垃圾邮件发送,则只有一个完整的请求被发送到服务器 - 每次触发提交时,都会重置POST并重新启动。

请注意,使用JavaScript来阻止这种行为是非常糟糕的,因为它非常容易禁用JS和垃圾邮件,这是浏览器一次只允许一次提交POST的原因之一。

如果你使用AJAX(你没有指定),那么你应该使用@ drrcknlsn的答案。

1
<form id="your-form"> 
    <input type="submit" id="submit" onclick="doSubmit(this);" value="Submit" /> 
</form> 
<script> 
    function doSubmit(el) { 
     var frm = document.getElementById('#your-form'); 
     el.value = 'Processing...'; 
     el.disabled = true; 
     frm.submit(); 
     setTimeout(function(el) { 
      el.value = 'Submit'; 
      el.disabled = false; 
     }, 5000); 
    } 
</script> 

这是做这件事。还有其他几个。

+0

嗨,感谢您的回复。这工作,但仍然当我按enter键将work.php和处理不会改回提交后 – lennard2011

0

如果您使用Ajax,则使用“Ajax Manager Plugin.”它将防止重复请求。

这样你就不必担心一个人多次击中输入或提交按钮。只有一个请求会通过,直到完成(但是那时我会假设一个成功的消息并且将会发生这种形式的清除)