Einen wunderschönen guten Abend.
Ich grübel schon den ganzen Tag über ein Problem.
Ich muss in einem HTML-Document unbedingt einen doppelten submit verhindern.
Klar, da gibt es auf form-Ebene den Befehl "onSubmit". Doch leider soll bei mir der "submit" selbst über einen "href" (href=document.form.submit();) ausgelöst werden.
Gut, dann habe ich eine kleine javascript funktion geschrieben, die den submit verhindert. Aber wenn ich nun das zweitemal diese funktion aufrufe, während ich schon auf einen antwort vom server warte, dann interpretiert der Browser das wie eine zurückgekommene Seite und auf das Serverergebnis kann ich dann lange warten :-(
Hat jemand eine idee?
ich muss nur irgendwie über einen hyperlink das form, so dass auch der onsubmit mitverarbeitet wir.
Über vorschläge wäre ich dankbar.
vielen dank im voraus
Gruß Marc
Hi,
ich verstehe Dewin Problem nicht ganz:
mit <a href="#" onClick="document.forms['formularname'].submit()">Hier klicken</a> kannst Du das Formular verschicken. Dabie ist es an sich egal, wie oft der User darauf klickt. Er sendet ja nur eine Anfrage an den Server. Was der Server daraus macht ist eine ganz andere Sache. Ich vermute mal, daß Du ein doppeltes Absenden z.B. eines Gästebucheintrags verhindern möchtest. Dies könntest Du auch sreverseitig bewerkstelligen, indem Du z.B. die IP mitloggst und eine IP-Speere von 10 min oder so setzt.
Falls Du das unbedingt mit JS realisieren mußt/willst, kannst Du folgendes machen:
<script>
var gesendet=0;
function senden()
{
if (gesendet==0)
{
gesendet++;
document.forms['formularname'].submit();
return false; # verhindert das "Ausführen" des Link, also den Verweis nach oben
}
else
{
alert("Formular wurde schon abgeschickt");
return false;
}
}
</script>
<a href="#" onClick="senden()">Hier klicken</a>
Viele Grüße...
Alex :)
Hi Alex,
danke für Deine Antwort, doch leider bekomme ich so noch nichtmal den Submit ausgelöst.
Hier meine Sourcen:
<SCRIPT LANGUAGE="JavaScript">
top.undoWait();
function callDay(OPT)
{
document.form1.OPTION.value=OPT;
if(top.checkDate(document.form1.DATE) && top.checkWait())
{
document.form1.submit();
top.doWait();
}
return false;
}
</script>
</head>
<body onunLoad="top.cleanupInfo()" background="/images/bg_action.gif" leftmargin="17" marginwidth="17">
<form name="form1" method="post" action="/scripts/MGrqispi93.dll">
<a href="#" onClick="callDay('B')">backward</a>
<a href="javascript:callDay('F')">forward</a>
<a href="javascript:callDay('S')">search</a>
Der Link "backward" ist nach Deinem Beispiel realisiert. Komischer weise macht dieser keinen submit. Es wird lediglich mit der funktion "top.doWait()" in einem Infobereich angezeigt, das der User bitte warten soll.
Beide anderen Links machen auch den "submit".
Nochmal zu meinem Problem.
Löse ich den submit über meinen Link aus, dann blinkt in einem Infobereich "Bitte warten" und an den Server wird request geschickt. mache ich nichts weiter, alse keinen weiteren submit, dann bekomme ich wie gewohnt ein ergebnis zurück und das "Bitte warten" verschwindet wieder.
Löse ich den submit wie gerade schon beschrieben aus, aber klicke dann erneut auf meinen Link, bevor der request zurück ist, dann bekomme ich einen alert('Bitte warten, bis der request verarbeitet ist!'). Im Info Bereich blinkt weiter "Bitte warten". So weit so gut, aber leider kann ich jetzt so lange warten wie ich will. Die Seite kommt einfach nicht mehr zurück.
Jetzt kommt der Hammer. setze ich einen normalen "Submit-Button" auf das form und der lasse die funktion "callDay(OPT)" über den "onSubmit" ausführen, dann funktioniert alles wunderbar.
Ich kann während dem Request klicken bis ich schwarz werde. Es blinkt die ganze Zeit "Bitte warten" und bei jedem klick bekomme ich die Msgbox. Ist der server fertig, dann bekomme ich wie gewohnt die Seite zurück.
Ich bin wirklich RATLOS.
Aber vielleicht klappt ja Deine methode und ich habe da einen Fehler übersehen.
Kannst du Dir das bitte nochmal anschauen?
Vielen Dank vorab
Gruß Marc
FIXED :-)
Ich habe den Link geändert:
vorher --> <a href="javascript:callDay('F')">forward</a>
nachher --> <a href="#" onClick="callDay('F');return false">forward</a>