Warum wird mein Formular nicht gesendet, wenn ich die Senden-Schaltfläche deaktiviere, um ein Doppelklicken zu verhindern?

Wie bei jedem anderen Webentwickler auf dem Planeten habe ich ein Problem mit Benutzern, die auf die Senden-Schaltfläche in meinen Formularen doppelklicken. Meines Wissens nach besteht die herkömmliche Möglichkeit, dieses Problem zu beheben, darin, die Schaltfläche sofort nach dem ersten Klicken zu deaktiviereit postet nicht.

Ich habe einige Nachforschungen angestellt, Gott weiß, dass es genug Informationen gibt, aber andere Fragen wieSchaltfläche bei Formularübermittlung deaktivieren, das Deaktivieren der Schaltfläche scheint zu funktionieren. Das Originalplakat vonDisable Button nach Absenden scheint dasselbe Problem gehabt zu haben wie ich, aber es gibt keine Erwähnung, wie / ob er es gelöst hat.

Hier ist ein Code, wie man es wiederholt (getestet in IE8 Beta2, hatte aber das gleiche Problem in IE7)

Mein 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>

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

Beachten Sie, dass beim Klicken auf die Schaltfläche ein Postback auftritt und die Uhrzeit aktualisiert wird. Wenn Sie jedoch das Kontrollkästchen aktivieren, wird die Schaltfläche beim nächsten Klicken auf die Schaltfläche deaktiviert (wie erwartet), das Postback wird jedoch nie ausgeführt.

Was zum Teufel vermisse ich hier ???

Danke im Voraus

Antworten auf die Frage(20)

Ihre Antwort auf die Frage