像地球上的其他每个Web开发人员一样,我在用户双击表单上的提交按钮时遇到问题.我的理解是,处理这个问题的传统方法是在第一次点击后立即禁用按钮,但是当我这样做时,它不会发布.
我对此做了一些研究,上帝知道有足够的信息,但其他问题如Disable button on form submission,禁用按钮似乎有效. Disable button after submit的原始海报似乎与我有同样的问题,但没有提及如何/如果他解决它.
这里有一些关于如何重复它的代码(在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>
我的cs代码
using System; public partial class _Default : System.Web.UI.Page { protected override void OnInit(EventArgs e) { base.OnInit(e); btn.Click += new EventHandler(btn_Click); btn.OnClientClick = "btn_onClick();"; } void btn_Click(object sender,EventArgs e) { lit.Text = DateTime.Now.ToString("HH:mm:ss"); } }
请注意,单击该按钮时,将发生回发,并更新时间.但是当您选中复选框时,下次单击该按钮时,该按钮将被禁用(按预期方式),但永远不会进行回发.
我在这里想念的是什么?
提前致谢.
解决方法
我想你只是错过了这个标签:
UseSubmitBehavior="false"
试试这样:
<asp:Button ID="btnUpdate" runat="server" UseSubmitBehavior="false" OnClientClick="if(Page_ClientValidate()) { this.disabled = true; } else {return false;}" Text = "Update" CssClass="button" OnClick="btnUpdate_Click" ValidationGroup="vgNew"/>