Wie bei jedem anderen Webentwickler auf diesem Planeten habe ich ein Problem damit, dass Benutzer auf die Schaltfläche "Senden" in meinen Formularen doppelklicken. Mein Verständnis ist, dass die konventionelle Art, dieses Problem zu behandeln, darin besteht, die Schaltfläche sofort nach dem ersten Klick zu deaktivieren. Wenn ich dies jedoch tue, wird nicht gepostet .
Ich habe einige Nachforschungen darüber angestellt, Gott weiß, dass es genug Informationen gibt, aber andere Fragen wie Disable Schaltfläche beim Senden des Formulars , die Deaktivierung der Schaltfläche scheint zu funktionieren. Das Original-Poster von Disable-Button nach dem Senden scheint das gleiche Problem zu haben wie ich, aber da ist nicht zu erwähnen, wie / wenn er es gelöst hat.
Hier ist ein Code, wie man es wiederholt (getestet in IE8 Beta2, hatte aber dasselbe Problem in IE7)
Mein aspx-Code
%Vor%Mein cs-Code
%Vor%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 das nächste Mal, wenn Sie auf die Schaltfläche klicken, die Schaltfläche deaktiviert (wie erwartet), aber das Postback wird nicht ausgeführt.
Was zum HECK AM ICH VERMISST HIER ???
Vielen Dank im Voraus.
Fall888 ist richtig, Ihr Ansatz funktioniert nicht cross-browser. Ich verwende dieses kleine Snippet , um einen Doppelklick zu verhindern.
> UseSubmitBehavior="false"
konvertiert die Schaltfläche zum Senden an die normale Schaltfläche ( <input type="button">
). Wenn dies nicht der Fall sein soll, können Sie die Senden-Schaltfläche ausblenden und sofort die deaktivierte Schaltfläche an ihrer Stelle einfügen. Da dies so schnell passiert, wird es so aussehen, als würde die Schaltfläche für den Benutzer deaktiviert werden. Details finden Sie unter der Blog von Josh Stodola .
Codebeispiel (jQuery):
%Vor%"Deaktivieren" von HTML-Steuerelementen führt nicht immer zu konsistentem Verhalten in allen gängigen Browsern. Daher versuche ich, dies auf der Client-Seite zu vermeiden, weil Sie (in Verbindung mit dem ASP.NET-Modell) in diesem Fall den Status des Elements auf Client und Server verfolgen müssen.
Ich würde den Button vom sichtbaren Teil des Fensters entfernen, indem ich den className der Schaltfläche in eine CSS-Klasse umschalte, die Folgendes enthält:
%Vor%Was nun an die Stelle des Knopfes?
Und das kann genauso gemacht werden, aber umgekehrt. Beginnen Sie mit dem Element, das beim Laden der Seite ausgeblendet wird, und wechseln Sie dann zu einem sichtbaren Klassennamen in der Formularübertragung.
Wir verwenden das folgende JQuery-Skript, um alle Schaltflächen (input type = submit und button) zu deaktivieren, wenn auf eine Schaltfläche geklickt wird.
Wir haben das Skript nur in eine globale JavaScript-Datei eingefügt, sodass wir uns beim Erstellen neuer Schaltflächen nichts merken müssen.
%Vor%Dieses Skript könnte leicht um eine Prüfung auf PageClientValidate () erweitert werden.
Dies ist der richtige und einfache Weg, dies zu tun:
Es funktioniert in allen Browsern (anders als die oben akzeptierte Lösung).
Erstellen Sie eine Hilfsmethode in Ihrer Anwendung (zB in einem Utlity-Namespace):
%Vor%Jetzt können Sie aus dem Code hinter jeder Ihrer Webseiten einfach anrufen:
%Vor%Dabei ist button1 die Schaltfläche, die mehrere Klicks verhindern soll.
Dies setzt den On-Click-Handler einfach auf this.disabled = true
und fügt dann den eigenen Post-Back-Handler der Buttons hinzu, so erhalten wir:
onclick="this.disabled = true"; __ doPostBack ('ID $ ID', ''); "
Dies beeinträchtigt nicht das Standardverhalten der Seite und funktioniert in allen Browsern wie erwartet.
Viel Spaß!
Was geschieht bei der Fehlersuche, wenn Sie eine else-Klausel gegen das if (chk.checked) setzen?
FÜR JQUERY-BENUTZER
Sie werden auf alle möglichen Probleme stoßen, wenn Sie versuchen, Javascript direkt zum onClick-Ereignis in ASP.NET-Schaltflächen hinzuzufügen, wenn Sie jQuery-Ereignislistener verwenden.
Ich fand die beste Möglichkeit, Tasten zu deaktivieren und das Postback zur Arbeit zu bringen, war etwas wie folgt:
%Vor%Dabei ist ValidateForm Ihre benutzerdefinierte Validierungsfunktion, die true oder false zurückgibt, wenn Ihr Formular die Clientseite validiert.
Und buttonID ist die ID Ihrer Schaltfläche, z. B. "# button1"
Tags und Links javascript asp.net client-scripting double-submit-prevention