我有一个表单,需要一段时间服务器来处理.我需要确保用户等待并且不再尝试通过再次单击该按钮重新提交表单.我尝试使用以下jQuery代码:
<script type="text/javascript">
$(document).ready(function() {
$("form#my_form").submit(function() {
$('input').attr('disabled', 'disabled');
$('a').attr('disabled', 'disabled');
return true;
});
});
</script>
Run Code Online (Sandbox Code Playgroud)
当我在Firefox中尝试此操作时,所有内容都被禁用,但表单未提交任何它应包含的POST数据.我不能使用jQuery提交表单,因为我需要使用表单提交按钮,因为有多个提交按钮,我确定哪个用于POST中包含哪个值.我需要像往常一样提交表单,我需要在发生后立即禁用所有内容.
谢谢!
我想看看Web开发人员如何避免双重提交问题.基本上我对这个问题的理解如下:
当不耐烦的用户多次提交表单时会发生双重提交,从而导致问题.这个问题可以通过JavaScript(特别是jQuery脚本)来修复,这些脚本在提交表单后禁用了提交按钮 - 这样做的一个弱点就是客户端禁用了JavaScript.
还有服务器端检测方法.
所以我的问题是:
人们如何克服双重提交?什么是双重提交引起的问题的真实例子?任何Web应用程序框架都内置了双重提交工具吗?
我在做网络开发.
我有一个与信用卡有关的页面,当用户点击"刷新"或"返回"时,交易将再次执行,这是不需要的.
这包括浏览器左上角的"后退"和"刷新"按钮,"右键单击 - >刷新/返回",按"F5"键.这只能在某些cgi页面上完成,而不是全部.
可以使用Javascript完成吗?还是其他方法?
我需要避免双击提交行为.我正在使用不显眼的库进行客户端验证.我有以下代码来避免双重clic:
jQuery.fn.preventDoubleSubmit = function () {
var alreadySubmitted = false;
return jQuery(this).submit(function () {
if (alreadySubmitted)
return false;
else {
alreadySubmitted = true;
}
});
};
jQuery('form').preventDoubleSubmit();
Run Code Online (Sandbox Code Playgroud)
不幸的是,如果我的表单有一些可验证的字段(例如,必填字段),上面的代码仍然被触发,因此,即使我更正了表单上的任何错误,我也无法再次提交.
验证成功完成后,如何触发双击代码?
我们在WebSphere v8.5上使用JSF 2.0,其中有几个组件库PrimeFaces 4.0,Tomahawk 2.0,RichFaces等.
我正在寻找通用机制,以避免刷新页面时重新提交表单,或者再次单击提交按钮时.我有许多不同场景的应用程序.
目前我已经考虑过在onclick
属性中使用一段JavaScript来禁用该按钮,但这并不令人满意.我正在寻找一个用于此目的的纯Java实现,类似于Struts2 <s:token>
.
像地球上的其他每个Web开发人员一样,用户双击表单上的提交按钮时遇到问题.我的理解是,处理这个问题的传统方法是在第一次点击后立即禁用按钮,但是当我这样做时,它不会发布.
我对此做了一些研究,上帝知道有足够的信息,但其他问题,如表单提交上的禁用按钮,禁用按钮似乎工作.提交后禁用按钮的原始海报似乎与我有同样的问题,但没有提及如何/如果他解决它.
这里有一些关于如何重复它的代码(在IE8 Beta2中测试,但在IE7中有同样的问题)
我的aspx代码
<%@ Page Language="C#" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<script language="javascript" type="text/javascript">
function btn_onClick()
{
var chk = document.getElementById("chk");
if(chk.checked)
{
var btn = document.getElementById("btn");
btn.disabled = true;
}
}
</script>
<body>
<form id="form1" runat="server">
<asp:Literal ID="lit" Text="--:--:--" runat="server" />
<br />
<asp:Button ID="btn" Text="Submit" runat="server" />
<br />
<input type="checkbox" id="chk" />Disable button on first click
</form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我的cs代码
using …
Run Code Online (Sandbox Code Playgroud) 如何阻止用户双击我的注册表单上的提交按钮,这是一个ajax局部视图?
我很遗憾地问,因为这已经被问到了.我现在找不到一个明确的工作答案.禁用该按钮会阻止提交.使用var javascript clickcount + alert + return_false不会重置.
环境:asp.net mvc3
查看:
表单显示onload:@RenderPage("_SignupForm.cshtml")
提交使用:
@using (Ajax.BeginForm("Index", "Signup", null,
new AjaxOptions
{
UpdateTargetId = "signupForm",
InsertionMode = InsertionMode.Replace,
HttpMethod = "POST",
LoadingElementId="progress"
}
))
Run Code Online (Sandbox Code Playgroud)
提交控制权: <input type="submit" value="Sign up" />
SignupController:
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult Index(SignupModel formvalues)
{
Thread.Sleep(5000);
string errors = "";
if (TryValidateModel(formvalues))
{
errors = SignupAPI.Signup(formvalues); //includes custom validation
}
if (ModelState.IsValid == false || string.IsNullOrEmpty(errors) == false)
{
ViewBag.Errors = errors; …
Run Code Online (Sandbox Code Playgroud) 我想在现有的Java Web应用程序中实现双提交预防(实际上是struts).在架构方面,我们讨论的是2到N个可能的应用服务器(tomcat)和一个单一的数据库服务器(mysql).各个服务器彼此不了解,也无法交换消息.在应用程序服务器前面有一个负载均衡器,可以进行粘性会话.
所以基本上有两种双提交预防客户端和服务器端.如果可能的话,我想进入服务器端,因为如果人们在浏览器中禁用cookie和/或javascript,所有客户端技术似乎都会失败.
这让我想到通过数据库锁进行某种类似互斥的同步.我认为可以计算用户输入数据的校验和并将其持久保存到专用数据库表.在每次提交时,应用程序必须检查是否存在相等的校验和,这表明给定的提交是重复的.当然,必须定期清除此表中的校验和.问题是检查数据库中是否存在重复校验和的整个过程,如果没有校验和,则插入校验和几乎是一个关键部分.因此,必须事先锁定校验和表,并在该部分之后再次解锁.
当我想到桌子锁时,我的僵局和瓶颈警铃开始响起.所以我的问题是:是否有更好的方法来防止无状态Web应用程序中的双重提交?
请注意,struts TokenInterceptor
不能在这里应用,因为当禁用cookie时它会失败(它依赖于HTTP会话,如果没有会话cookie,它就不存在).
java struts web-applications stateless double-submit-prevention
所以我有一个如下所示的提交按钮:
<a href="#" id="submitbutton"
onClick="document.getElementById('UploaderSWF').submit();">
<img src="../images/user/create-product.png" border="0" /></a>
Run Code Online (Sandbox Code Playgroud)
当我双击它时双重明显提交,问题是我将信息保存在数据库中,所以我会在那里发布信息,我不想要那样.这个上传器使用flash和javscript,这里有一小段代码与提交的东西相关(如果它有帮助)
$.fn.agileUploaderSubmit = function() {
if($.browser.msie && $.browser.version == '6.0') {
window.document.agileUploaderSWF.submit();
} else {
document.getElementById('agileUploaderSWF').submit();
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
感谢你们.我感谢您的帮助.这是我自己无法做到的事情,因为我对js有这么一点经验而且我真的不知道该怎么做.谢谢.
完全重复:如何处理服务器端的多个提交
手头的一般任务:防止在基于多用户Web的应用程序中提交双表单.想想金融交易.
我有两种方法可以串联使用:
我正在寻找主题专家来贡献他们的最佳实践以及深奥的技巧.可以是任何语言和框架,但Django特别感兴趣.网上已经写了很多关于手头任务的内容,但最好有这里展示的最佳实践.
javascript ×4
forms ×2
jquery ×2
asp.net ×1
browser ×1
client-side ×1
form-submit ×1
html ×1
http-post ×1
java ×1
jsf ×1
stateless ×1
struts ×1
unobtrusive ×1