Tag Sven.
ich habe folgende javascript gebaut um einen doppelten submit der user duch schnelles klicken o.ä. auszuschließen.
Prinzipiell sollte man sowas *immer* durch einen serverseitigen Mechanismus abfangen.
leider maht der ie (version 6.0.2900.2180) prinzipiell ein doppeltes submit. zeitgleich.
Vermutlich nicht nur der IE.
function do_start(d,f) {
var z = document.getElementById("BK").value;
document.getElementById("BK").value = "1";
if(z == 0) {
eval("document."+d+".method = 'post'");
eval("document."+d+".action = 'index.php?sess=1234567890&open=rechne.php&id="+f+"'");
eval("document."+d+".target = '_top'");
eval("document."+d+".submit()");
} else {
eval("document."+d+".number.value = '0'");
alert('Bitte nur einmal klicken! Die Anfrage wird schon bearbeitet!');
}
}
Oje, so einen exzessiven und unnötigen Gebrauch von eval() habe ich lange nicht mehr gesehen. Sieh dir bitte zunächst die allgemeinen Regeln für den Zugriff auf Formulare an, dort insbesondere Schema 4.
Im nächsten Schritt überlege genau, was dein Javascript macht:
1. Prüfen, ob bereits versandt
2a. Wenn nicht, setze das Formularziel ("action")
2b. Wenn ja, Fehlermeldung
3. Formular versenden
Jetzt überlege, wann ein Script im else-Zweig landet: wenn das Formular bereits versandt wurde. Da der Versand über die gleiche Funktion erfolgt, *muss* zwangsläufig der erste Teil (if z == 0) bereits durchlaufen worden sein, dein Formular hat also sein Ziel erhalten. Aber du verhinderst nirgendwo in deiner JS-Funktion, dass das bereits versandte Formular nicht nochmal versandt wird, es wird stets versandt (siehe 3.). Dein Stichwort für die Problemlösung lautet "return true/false", siehe hierzu auch das Beispiel zu onsubmit.
Siechfred