Hallo,
erklären kann ich die Beobachtung nicht, aber es ist nicht so recht definiert, was mit JS-Ereignissen passiert, die zwischen dem »Abräumen« des abgesendeten Formulars und dem vollständigen Darstellen der Serverantwort passieren.
Deine Methode scheint mir unnötig kompliziert und sie hängt eben von der korrekten JavaScript-Ausführung in dieser Grauzone zwischen den beiden Dokumenten ab. Ich würde den Ansatz wählen, den Submit-Button auf disabled zu stellen. Dann nimmt der Browser gar keine Klicks darauf entgegen und es hängt nicht von einem JS-Event-Handler ab, ob diese Klicks zum Absenden des Formulares führen. Beispiel:
window.onload = function () {
document.forms.formular.onsubmit = sperreButton;
};
function sperreButton () {
var button = document.forms.formular.elements.submitbutton;
button.disabled = true;
window.setTimeout(function () {
button.disabled = false;
}, 3000);
}
Wie du siehst, arbeite ich hier weder mit Klick-Handlern, muss nicht die Zeit messen und muss auch nicht mit return false die Standardaktion des Ereignisses (das Absenden des Formulars) unterdrücken. Beim submit wird einfach der Button ausgegraut, dann ist kein erneutes Absenden mehr möglich (zumindest nicht durch einen Klick auf den Button). Nach 3 Sekunden Verzögerung wird der Button wieder freigegeben.
Mathias