在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
Web页面中经常碰到这类问题,就是客户端多次点击一个按钮或者链接,导致程序出现不可预知的麻烦. 客户就是上帝,他们也不是有意要给你的系统造成破坏,这么做的原因很大一部分是因为网络慢,点击一个操作之后,系统响应慢,于是点击多次.如果我们遇到这种情况, 也许是一样的操作方法,所以解决问题才是王道. 废话不多说,直接切入正题. 方法一:在客户端制作一个遮罩层. 即用js和css制作一个纯白色或者黑色的遮罩的div,当客户端点击按钮时,弹出这个div并覆盖在当前用户界面之上, 这样遮罩层下面的内容被屏蔽,用户就无法进行鼠标的多次点击操作. 优点:一个好的遮罩层具有很美观的UI感受,并且相对降低一点用户等待服务器响应的枯燥度. 缺点:遮罩下面的内容,如果用键盘操作,比如Enter键,还是可以操作的哦.(亲,这也是后来测试中才发现的,也许还有更好的遮罩层的代码,能够做到这些吧,我是没有用过). 遮罩层代码不再给出,可以在网上搜索使用. 方法二:用js代码判断重复提交,给出提示并拒绝提交至服务器. 前台代码: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.WebForm1" %> <!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"> <head runat="server"> <title></title> </head> <script type="text/javascript"> //记录是否重复提交表单数据 var repeatFlag = false; function CheckRepeatClick() { if (repeatFlag == false) { repeatFlag = true; return true; } else { alert("数据处理中,请稍候..."); return false } } </script> <body> <form id="form1" runat="server"> <div> 这只是个测试网页 <asp:Button ID="btnOK" runat="server" OnClick="btnOK_Click" Text="OK" OnClientClick="return CheckRepeatClick();"/> <asp:LinkButton ID="lkbtnOK" runat="server" onclick="lkbtnOK_Click" OnClientClick="return CheckRepeatClick();" >测试LinkButton按钮</asp:LinkButton> System.Threading.Thread.Sleep(5000); //这里只是为了模拟后台相应慢的一个动作,替换成你自己的处理逻辑就OK了 } <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.WebForm1" EnableEventValidation="false" %> <!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"> <head runat="server"> <title></title> </head> <script type="text/javascript"> //记录是否重复提交表单数据 var repeatFlag = false; function CheckRepeatClick() { if (repeatFlag == false) { repeatFlag = true; return true; } else { alert("数据处理中,请稍候..."); return false } } </script> <body> <form id="form1" runat="server"> <div> 这只是个测试网页 <asp:Button ID="btnOK" runat="server" OnClick="btnOK_Click" Text="OK" /> <asp:LinkButton ID="lkbtnOK" runat="server" onclick="lkbtnOK_Click" >测试LinkButton按钮</asp:LinkButton> </div> </form> </body> </html> 后台代码: protected void Page_Load(object sender, EventArgs e) { this.btnOK.Attributes.Add(" onclick ", ClientScript.GetPostBackEventReference (btnOK, " Click ") + " ;this.disabled=true; this.value='提交中...'; "); this.lkbtnOK.Attributes.Add(" onclick ", ClientScript.GetPostBackEventReference (lkbtnOK, " Click ") + " ;this.disabled=true; "); } protected void btnOK_Click(object sender, EventArgs e) { System.Threading.Thread.Sleep(5000); //这里只是为了模拟后台相应慢的一个动作,替换成你自己的处理逻辑就OK了 } protected void lkbtnOK_Click(object sender, EventArgs e) { System.Threading.Thread.Sleep(5000); } 效果:当单击按钮OK后,按钮本身更改为灰色不可用,并更改文本为"提交中...",这时候再次单击按钮,无法向服务器发送请求,从而屏蔽了重复提交, |
请发表评论