有时候,我们某个按钮处理的工作量很大,耗时很久,可能引发用户的误解,以为程序未响应,结果再次提交,可能导致处理逻辑执行到一半,又再次执行。
那我们有什么办法可以做到不让用户重复点击,又能给予友好的操作等待提示呢?下面是一个小小实践。
效果图:
前台代码:
<%@ Page Language="C#" AutoEventWireup="true" 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" >
<head runat="server">
<title>如何防止按钮重复提交的一个实践</title>
<script type="text/javascript">
var IsClickSumbit = false;//全局变量
function CheckIsClickSumbit(BtnSumbit)
{
if(IsClickSumbit)//拦截重复点击(页面在刷新前,全局变量的值是一个静态变量)
{
return false;
}
else
{
document.getElementById(BtnSumbit).disabled= true;//提交按钮变灰
document.getElementById("divImg").style.display ="block";
document.getElementById("ImgLoadingAnimation").src="LoadingAnimation.gif"
document.getElementById("BtnHideSumbit").click();//执行委托: protected void BtnSumbit_Click(object sender, EventArgs e)
return true;
}
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:button ID="BtnSumbit" runat="server" Text="提 交" OnClientClick="javascript:CheckIsClickSumbit('BtnSumbit')" style="cursor:hand" OnClick="BtnSumbit_Click" />
<div>
<br/>
</div>
<div id="divImg" style="display :none">
<img id="ImgLoadingAnimation" src="" alt="正在处理中..." />
<asp:LinkButton ID="BtnHideSumbit" runat="server" OnClick="BtnSumbit_Click" Text="" /><!--注意:Text为空!故在界面上是不可见的,但是又保证了BtnHideSumbit是确实存在的一个被委托的元素-->
</div>
</div>
</form>
</body>
</html>