像地球上的其他 Web 开发人员一样,我遇到了用户双击表单上的提交按钮的问题。我的理解是,处理此问题的常规方法是在第一次单击后立即禁用按钮,但是当我这样做时,它不会发布.
我确实对此进行了一些研究,上帝知道有足够的信息,但是其他问题,例如Disable button on form submission,禁用按钮似乎有效。提交后禁用按钮的原始海报似乎和我有同样的问题,但没有提到他如何/如果他解决了这个问题。
这是一些关于如何重复它的代码(在 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");
}
}
请注意,当您单击按钮时,会发生回发,并且时间会更新。但是当您选中该复选框时,下次单击该按钮时,该按钮被禁用(如预期的那样),但永远不会回发。
我到底在想什么???
提前致谢。