Why doesn't my form post when I disable the submit button to prevent double clicking?

Posted by John MacIntyre on Stack Overflow See other posts from Stack Overflow or by John MacIntyre
Published on 2008-12-30T15:49:32Z Indexed on 2010/03/09 4:36 UTC
Read the original article Hit count: 309

Like every other web developer on the planet, I have an issue with users double clicking the submit button on my forms. My understanding is that the conventional way to handle this issue, is to disable the button immediately after the first click, however when I do this, it doesn't post.

I did do some research on this, god knows there's enough information, but other questions like Disable button on form submission, disabling the button appears to work. The original poster of Disable button after submit appears to have had the same problem as me, but there is no mention on how/if he resolved it.

Here's some code on how to repeat it (tested in IE8 Beta2, but had same problem in IE7)

My aspx code

<%@ 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>

My cs code

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");
    }
}

Notice that when you click the button, a postback occurs, and the time is updated. But when you check the check box, the next time you click the button, the button is disabled (as expected), but never does the postback.

WHAT THE HECK AM I MISSING HERE???

Thanks in advance.

© Stack Overflow or respective owner

Related posts about ASP.NET

Related posts about double-submit-prevention