源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

防止重复提交 仅提交一次的终极绝杀技

  • 时间:2020-05-31 20:27 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:防止重复提交 仅提交一次的终极绝杀技
作者:Silent Void 出处:[url=http://happyhippy.cnblogs.com/]http://happyhippy.cnblogs.com/[/url] 最近一个客户,老抱怨每个月总有几条重复的业务数据;但创建该业务数据的页面,我们已经应用了常规的防重复提交技术,为啥还这样呢…… 1. 常规防重复提交
[url=http://www.1sucai.cn/upload/201008/20100816232734259.png][img]http://files.jb51.net/upload/201008/20100816232734353.png[/img] [/url] 
[url=http://www.1sucai.cn/upload/201008/20100816232734520.png][img]http://files.jb51.net/upload/201008/20100816232734144.png[/img] [/url]     处理思路就是,用数组记录用户的点击时间,如果点击时间小于某个时间间隔(下面演示的1秒,即1000毫秒),则认为是重复提交,并取消当前点击事件,直接上代码了:
[u]复制代码[/u] 代码如下:
<html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <script type="text/javascript"> var date = new Array(); function disableButton(button, validateGroup) { date.push(new Date()); if (date.length > 1 && (date[date.length - 1].getTime() - date[date.length - 2].getTime() < 1000))//小于1秒则认为重复提交 { event.cancelBubble = true; //测试时发现,如果直接单独设置cancelBubble、或者returnValue来取消事件,经常取消不了,依然存在重复提交的可能。因此只好用返回值来实现手工控制! return false; } if (typeof (Page_ClientValidate) == 'function' && ((validateGroup == undefined && Page_ClientValidate() == false) || (validateGroup != undefined && Page_ClientValidate(validateGroup) == false))) { //如果指定了ValidateGroup,则只验证改组;如果未指定,则验证全部验证控件 return false; } button.disabled = true; return true; } function doubleClick() { var button1 = document.getElementById('btnPostBack1'); button1.onclick(); button1.onclick(); } </script> </head> <body> <form id="form" runat="server"> <div> <asp:TextBox runat="server" ID="tbxInput1"></asp:TextBox> <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="tbxInput1" ValidationGroup="Group1" ErrorMessage="*"></asp:RequiredFieldValidator> <asp:Button runat="server" ID="btnPostBack1" Text="按我1" UseSubmitBehavior="false" ValidationGroup="Group1" OnClientClick="if(!disableButton(this, 'Group1')) return false;" OnClick="btnPostBack_Click"> </asp:Button> </div> <div> <asp:TextBox runat="server" ID="tbxInput2"></asp:TextBox> <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ControlToValidate="tbxInput2" ValidationGroup="Group2" ErrorMessage="*"></asp:RequiredFieldValidator> <asp:Button runat="server" ID="btnPostBack2" Text="按我2" UseSubmitBehavior="false" OnClientClick="if(!disableButton(this)) return false;" OnClick="btnPostBack_Click"> </asp:Button> </div> <input type="button" onclick="doubleClick();" value="点击一次,模拟连续点击'按我1'两次" /> </form> </body> </html>
说明: (1). 测试时发现,如果直接单独设置cancelBubble、或者returnValue来取消事件,经常取消不了,依然存在高频率的重复提交。因此只好用返回值来实现手工控制; (2). disableButton接收一个validateGroup参数,如果指定了ValidateGroup,则只验证改组;如果未指定,则验证全部验证控件。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部