DataFox
Erfahrenes Mitglied
Hi Leute
Ich habe ein Formular und jede Menge Ajax auf einer Seite. Das besagte Formular führt aber zu enem neuen Ziel, und bevor das passiert, müssein ein paar andere Ajax-Funktionen noch schnell ausgeführt werden. Erst dann soll der Browser das Formular wirklich versenden. Dies soll automatisch für alle Formulare auf der Website gelten, deshalb will ich es allgemein halten.
So gehe ich vor:
1) bei onMouseDown auf ein Formular-Element wird dem Formular ein onSubmit-Eventlistener für eine Funktion verpasst, die return false; zurückliefert. Im Internet-Explorer verhindert dies das der Browser sofort das Formular abschickt. Im Firefox funktioniert es nicht.
2) Außerdem wird ein onSubmit-Eventlistener angehängt der eine spezielle Funktion ausführt, wenn das Formular submittet wird. Das funktioniert in MSIE und Firefox.
3) nach dem die aufgerufene AJAX-Funktion alles erledigt hat, soll das Formular tatsächlich abgeschickt werden. Dazu wird wieder eine spezielle Funktion aufgerufen, und die löscht beide Eventlistener die zuvor angehängt wurden und macht dann auf das Formular-Element einen submit();
Aus irgend einem Grund kan nich das Formular Element aber nicht automatisch per JavaScript submitten
Hier der relevante Code:
normale Formulare die ich noch nicht mit den Eventlistener-Funktionen "bearbeitet" habe kann ich ganz normal mit submit(); abschicken...
Der FireFox/FireBug sagt mir dazu nichts und der MSIE 6.0 sagt: Das Objekt unterstützt diese Eigenschaft oder Methode nicht.
Habe auch die Developer-Toolbar mit dem JS-Debugger drin, aber da bekomme ich nur eine leere Seite. Der Fehler bezieht sich auf das eo.submit();
Ich habe aber mit einem alert(eo.action) geprüft ob es wirklich das Formularelement ist, und ja...das ist es. Kann es nicht submitten und der FireFox gehorcht dem return false; nicht und submittet immer sofort (auch mit alerts getestet - der submittet auch, wenn ich das eo.submit() auskommentiere...t also net)
hat jemand einen Tipp wie man das am besten anstellen könnte? Würde mich echt freuen, komm einfach net weiter
Gruß
Laura
--------------------
Nachtrag:
ich habe es jetzt so hinbekommen das es im Internet-Explorer läuft. Nur im Firefox schaffe ich es nicht das Formular mit return false; anzuhalten, um erst einmal die AJAX-Funktion auszuführen... irgendwie will der das nicht schlucken.
Muss man beim Firefox irgendwas anders machen als im MSIE, um ein Formular anzuhalten bzw. zu stoppen?
Gruß
Laura
-----------------
Nachtrag:
bin fündig geworden:
http://www.gerd-riesselmann.net/archives/2005/04/firefox-canceling-problem-solved
scheint so eine art FF-Bug zu sein!
Ich habe ein Formular und jede Menge Ajax auf einer Seite. Das besagte Formular führt aber zu enem neuen Ziel, und bevor das passiert, müssein ein paar andere Ajax-Funktionen noch schnell ausgeführt werden. Erst dann soll der Browser das Formular wirklich versenden. Dies soll automatisch für alle Formulare auf der Website gelten, deshalb will ich es allgemein halten.
So gehe ich vor:
1) bei onMouseDown auf ein Formular-Element wird dem Formular ein onSubmit-Eventlistener für eine Funktion verpasst, die return false; zurückliefert. Im Internet-Explorer verhindert dies das der Browser sofort das Formular abschickt. Im Firefox funktioniert es nicht.
2) Außerdem wird ein onSubmit-Eventlistener angehängt der eine spezielle Funktion ausführt, wenn das Formular submittet wird. Das funktioniert in MSIE und Firefox.
3) nach dem die aufgerufene AJAX-Funktion alles erledigt hat, soll das Formular tatsächlich abgeschickt werden. Dazu wird wieder eine spezielle Funktion aufgerufen, und die löscht beide Eventlistener die zuvor angehängt wurden und macht dann auf das Formular-Element einen submit();
Aus irgend einem Grund kan nich das Formular Element aber nicht automatisch per JavaScript submitten
Hier der relevante Code:
Code:
// OnMouseDown Eventlistener anhängen
addEvent(window.document, 'mousedown', documentMousedownEventFunction);
function documentMousedownEventFunction(e){
if(!e) e = window.event;
var eo = e.srcElement || e.target;
if(eo.tagName == "INPUT" && eo.type == "SUBMIT") {
//das Formularelement ermitteln:
while(eo.tagName != "FORM" && eo.parentNode){
eo = eo.parentNode;
}
if(eo.onsubmit) {
var original_onsubmit = eo.onsubmit;
addEvent(this, 'submit', original_onsubmit);
}
addEvent(eo, 'submit', returnFalse);
addEvent(eo, 'submit', formOnSubmitAction);
}
}
// wird bei onSubmit ausgeführt, damit das Formular nicht sofort abgeschickt wird
function returnFalse(){
return false;
}
// wird bei onSubmit ausgeführt und führt die eigentliche AJAX-Func aus
function formOnSubmitAction(e) {
if(!e) e = window.event;
var eo = e.srcElement || e.target;
formOnSubmitActionNow(eo); //Eigentlich kommt hier die AJAX-Func, die dann diese func hier aufruft. Stark vereinfacht also!
}
// hier die funktion die das formular abschicken soll
function formOnSubmitActionNow(eo) {
removeEvent(eo, 'submit', formOnSubmitAction);
removeEvent(eo, 'submit', returnFalse);
eo.submit();
}
normale Formulare die ich noch nicht mit den Eventlistener-Funktionen "bearbeitet" habe kann ich ganz normal mit submit(); abschicken...
Der FireFox/FireBug sagt mir dazu nichts und der MSIE 6.0 sagt: Das Objekt unterstützt diese Eigenschaft oder Methode nicht.
Habe auch die Developer-Toolbar mit dem JS-Debugger drin, aber da bekomme ich nur eine leere Seite. Der Fehler bezieht sich auf das eo.submit();
Ich habe aber mit einem alert(eo.action) geprüft ob es wirklich das Formularelement ist, und ja...das ist es. Kann es nicht submitten und der FireFox gehorcht dem return false; nicht und submittet immer sofort (auch mit alerts getestet - der submittet auch, wenn ich das eo.submit() auskommentiere...t also net)
hat jemand einen Tipp wie man das am besten anstellen könnte? Würde mich echt freuen, komm einfach net weiter
Gruß
Laura
--------------------
Nachtrag:
ich habe es jetzt so hinbekommen das es im Internet-Explorer läuft. Nur im Firefox schaffe ich es nicht das Formular mit return false; anzuhalten, um erst einmal die AJAX-Funktion auszuführen... irgendwie will der das nicht schlucken.
Muss man beim Firefox irgendwas anders machen als im MSIE, um ein Formular anzuhalten bzw. zu stoppen?
Gruß
Laura
-----------------
Nachtrag:
bin fündig geworden:
http://www.gerd-riesselmann.net/archives/2005/04/firefox-canceling-problem-solved
scheint so eine art FF-Bug zu sein!
Zuletzt bearbeitet: