【发布时间】:2013-05-24 17:30:09
【问题描述】:
<input type="submit" name="btnADD" id="btnADD" value="ADD"/>
当用户单击两次添加按钮时,从两次将相同的数据提交到表中。 所以请帮我限制用户提交两次。
【问题讨论】:
-
一般来说,您可以添加一些数据库限制或确保在任何一种情况下都不会发生任何错误的东西。
标签: javascript html
<input type="submit" name="btnADD" id="btnADD" value="ADD"/>
当用户单击两次添加按钮时,从两次将相同的数据提交到表中。 所以请帮我限制用户提交两次。
【问题讨论】:
标签: javascript html
当用户点击提交按钮时,禁用该按钮。
<form onSubmit="disable()"></form>
function disable()
{
document.getElementById('submitBtn').disabled = true;
//SUBMIT HERE
}
【讨论】:
;).
$_POST['submitBtn'](因为我添加了多个提交按钮并且需要知道它们使用了哪个按钮)它失败了,因为它没有设置。
您可以使用 JavaScript。
将form.submit.disabled = true; 附加到表单的onsubmit 事件中。
精明的用户可以绕过它,但它应该可以防止 99% 的用户提交两次。
【讨论】:
试试这个代码..
<input type="submit" name="btnADD" id="btnADD" value="ADD" onclick="this.disabled=true;this.value='Sending, please wait...';this.form.submit();" />
【讨论】:
您可以在单击“确定”重定向到其他地方时使用弹出“确定”按钮显示成功消息
【讨论】:
禁用提交按钮
$('#btnADD').attr('disabled','disabled');
or
$('#btnADD').attr('disabled','true');
【讨论】:
您可以在单击或隐藏按钮后禁用它。
<input type="submit" name="btnADD" id="btnADD" value="ADD" onclick="disableButton(this)"/>
js:
function disableButton(button) {
button.disabled = true;
button.value = "submitting...."
button.form.submit();
}
【讨论】:
您可以通知用户他喝了太多咖啡,但最好是使用 javascript 禁用该按钮,例如:
$("#btnADD").on('click', function(btn) {
btn.disabled = true;
});
【讨论】:
提交表单后,使用 jQuery 附加一个处理程序,该处理程序会劫持并“禁用”提交处理程序:
var $myForm = $("#my_form");
$myForm.submit(function(){
$myForm.submit(function(){
return false;
});
});
从提交处理程序返回“false”将阻止表单提交。禁用按钮会对表单的处理方式产生奇怪的影响。这种方法似乎基本上没有副作用,甚至适用于具有多个提交按钮的表单。
【讨论】:
我根据rogueleader的回答做了一个解决方案:
jQuery('form').submit(function(){
jQuery(this).unbind('submit'); // unbind this submit handler first and ...
jQuery(this).submit(function(){ // added the new submit handler (that does nothing)
return false;
});
console.log('submitting form'); // only for testing purposes
});
【讨论】:
如果您正在使用 java 服务器端脚本并且还使用 struts 2,那么您可以参考此链接,其中讨论了使用令牌。
http://www.xinotes.org/notes/note/369/
应该为初始页面渲染生成一个令牌并将其保存在会话中,当请求与令牌一起提交第一次时,在 struts 操作中运行一个线程名称作为令牌 id 的线程并运行任何逻辑客户端请求,当客户端再次提交相同的请求时,检查线程是否仍在运行(thread.getcurrentthread().interrupted)如果仍在运行则发送客户端重定向503。
并且如果您不使用任何框架并寻找简单的锻炼方式。 你可以求助
java.util.UUID.randomUUID();
只需将随机 uuid 放入会话中以及隐藏表单字段和另一侧(您正在处理其他工作的 jsp 页面,例如将数据存储到数据库等)从会话和隐藏表单字段中取出 uuid,如果表单字段匹配而不是进一步进行,从会话中删除 uuid,如果不是,则可能已重新提交表单。
为了您的帮助,我正在编写一些代码 sn-p 来说明如何实现这一目标。
<%
String formId=(java.util.UUID.randomUUID()).toString();
session.setAttribute(formId,formId);
%>
<input type='hidden' id='formId' name='formId' value='<%=formId%>'>
【讨论】:
为表单创建一个类,在我的例子中我使用:_submitlock
$(document).ready(function () {
$(document).on('submit', '._submitlock', function (event) {
// Check if the form has already been submitted
if (!$(this).hasClass('_submitted')) {
// Mark the form as submitted
$(this).addClass('_submitted');
// Update the attributes of the submit buttons
$(this).find('[type="submit"]').attr('disabled', 'disabled');
// Add classes required to visually change the state of the button
$(this).find('[type="submit"]').addClass("buttoninactive");
$(this).find('[type="submit"]').removeClass("buttonactive");
} else {
// Prevent the submit from occurring.
event.preventDefault();
}
});});
【讨论】:
在所有按钮 type="submit" 上放置一个类,例如“button-disable-onsubmit”,并使用 jQuery 脚本,如下所示:
$(function(){
$(".button-disable-onsubmit").click(function(){
$(this).attr("disabled", "disabled");
$(this).closest("form").submit();
});
});
请记住将此代码保存在通用 javascript 文件中,以便您可以在许多页面中使用它。像这样,它成为一个优雅且易于重用的解决方案。 此外,您甚至可以添加另一行来更改文本值:
$(this).val("Sending, please wait.");
【讨论】:
您可以在表单和提交按钮中添加一个类并使用 jquery:
$(function() {
// prevent the submit button to be pressed twice
$(".createForm").submit(function() {
$(this).find('.submit').attr('disabled', true);
$(this).find('.submit').text('Sending, please wait...');
});
})
【讨论】:
$(this).find('[type=submit]') 肯定会达到同样的效果,而不需要添加任何类。
我对类似问题的解决方案是创建一个单独的隐藏提交按钮。它是这样工作的:
onclick 导致按下第二个提交按钮。<input type="submit" value="Email" onclick="this.disabled=true; this.value='Emailing...'; document.getElementById('submit-button').click();">
<input type="submit" id='submit-button' value="Email" name="btnSubmitSendCertificate" style='display:none;'>
我走这条路只是为了让其他处理代码的人更清楚。还有其他一些主观上可能更好的解决方案。
【讨论】:
提交时向表单添加一个类,停止用户双击/提交
$('form[method=post]').each(function(){
$(this).submit(function(form_submission) {
if($(form_submission.target).attr('data-submitted')){
form_submission.preventDefault();
}else{
$(form_submission.target).attr('data-submitted', true);
}
});
});
【讨论】: