chiname

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

预防按钮的多次点击

今日在做一个新闻系统的评论时.
想到了预防"提交"按钮的多次点击的问提
(prevent multiple clicks of a submit button in ASP.NET).
以前碰到此类问提总是用重定位页面来解决.
这次我想找到一个一劳永逸的办法.

通过查讯Google,找到了一些代码,挑选一些较好的修改了一下。



public void page_load(Object obj,EventArgs e)
{
  btn.Attributes.Add("onclick","state=true;");
  StringBuilder sb=new StringBuilder();
  sb.Append("if (!state) return;");
  sb.Append("var button=document.getElementById('btn');");
  sb.Append("button.value=\" Please Wait... \";");
  sb.Append("document.body.style.cursor='wait';");
  sb.Append("button.disabled=true;");

 string strScript="<script>";
 strScript=strScript +"var state=false;";

 //将函数绑定到页面的onbeforeunload事件:
 strScript=strScript +"window.attachEvent('onbeforeunload',function(){" +sb.ToString()+ "});";
 strScript=strScript +"</"+"script>";
 Page.RegisterStartupScript("onbeforeunload",strScript);
}

private void Submit_Click(Object sender, EventArgs e){
  //模拟长时间的按钮处理
  System.Threading.Thread.Sleep(2000);
  Response.Write("<script>alert('bbbbbb!!');"+"</"+"script>");

}

<asp:button id="btn" Text="Submit" OnClick="Submit_Click" runat="server"/>




修改好的这个例子原理是提交后将按钮置于一定时间的无效状态.
仅能防止一些,因网速慢而心急的用户造成的误点击.
对于恶意的多次刷新而形成的多次提交还是没有办法解决.
(不过应该可通过页面的onbeforeunload事件解决)

posted on 2005-03-16 10:24 oupatch的C#专栏 阅读(237) 评论(2)  编辑 收藏

评论

# re: 预防按钮的多次点击 2005-03-16 11:32 tornado
this.btn_Agree.OnClientClick = "javascript:alert('。。。不能重复提交。。。。。);return false;";

  

# re: 预防按钮的多次点击 2005-03-16 12:30 supersnake
太复杂了.
既然不能预防刷新点击,
可能不如这样:

<input type=submit value=" 提交 " onclick='this.value="请等待...";this.disabled=true;return true;'>
 re: 预防按钮的多次点击 2005-03-16 11:32
posted on 2005-03-17 08:54  把我的欢乐带给你  阅读(277)  评论(0)    收藏  举报