Warum wird mein Formular nicht hochgeladen, wenn ich die Übermittlungsschaltfläche deaktiviere, um das Doppelklicken zu verhindern?

8

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.

    
John MacIntyre 30.12.2008, 15:49
quelle

10 Antworten

9

Ich denke, du verpasst nur dieses Tag:

%Vor%

Versuchen Sie es so:

%Vor%

Erklärung

    
Echostorm 30.12.2008, 16:19
quelle
6

Fall888 ist richtig, Ihr Ansatz funktioniert nicht cross-browser. Ich verwende dieses kleine Snippet , um einen Doppelklick zu verhindern.

>     
Mauricio Scheffer 30.12.2008 16:08
quelle
5

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%     
Pavel Chuchuva 27.06.2009 08:49
quelle
4

"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?

  1. Entweder ein Bild, das wie eine deaktivierte Schaltfläche aussieht
  2. Oder einfach nur ein Text mit der Aufschrift "Bitte warten ..."

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.

    
Kon 30.12.2008 15:54
quelle
2

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.

    
Thomas Jespersen 30.03.2010 10:44
quelle
1
%Vor%     
I.devries 30.12.2008 16:30
quelle
1

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ß!

    
George Filippakos 29.10.2011 15:56
quelle
0

Was geschieht bei der Fehlersuche, wenn Sie eine else-Klausel gegen das if (chk.checked) setzen?

    
Neil Barnwell 30.12.2008 16:01
quelle
0

Stellen Sie sicher, dass Ihre JavaScript-Funktion true zurückgibt (oder einen Wert, der den Wert boolean true hat), andernfalls wird das Formular nicht gesendet.

%Vor%     
tj111 30.12.2008 16:47
quelle
0

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"

    
George Filippakos 31.10.2011 18:03
quelle