![]() | |
![]() |
| | Thread Tools | Display Modes |
#1
| |||||
| |||||
|
|
Gibt es eine Möglichkeit (habe ich eine Property eines Elementes übersehen?), im Submit-Handler eines Formulars den gewählten Submit-Button zu ermitteln? |
|
Und: Wenn ich einen Listener an den Submit-Handler hänge, bleibt ein return false; in ebendiesem wirkungslos und das Formular wird jedenfalls submitted. |
|
Augenblicklich verhindere ich dies durch das Überschreben von form.onsubmit wie unten angeführt. Geht das eventuell eleganter? |
|
script type="text/javascript" window.onload = function() { document.forms[0].onsubmit = function() {return false;}; Event.addEvent(document.forms[0], "submit", function(e) { ... }); } /script |

|
Event.addEvent() ruft je nach DOM addEventListener() oder attachEvent() auf. Nachdem ich dzt. nur bastle, teste ich nur im FF; Hinweise auf zu erwartende Inkompatibilitäten sind willkommen. |
reventDefault() und Konsorten ein, was
#2
| |||
| |||
|
|
Gregor Kofler wrote: Event.addEvent() ruft je nach DOM addEventListener() oder attachEvent() auf. [...] [...] Event.addEvent dürfte eigentlich gar nicht funktionieren, allenfalls Event.prototype.addEvent, proprietär ist es ausserdem. Inkompatibilitäten sind so buchstäblich vorprogrammiert. Standardkonform wäre: document.forms[0].addEventListener( [...] |
|
[...] MSHTMLs attachEvent() will man wegen des this-Problems und der beliebigen Ausführungsreihenfolge vermeiden, |
#3
| |||||||
| |||||||
|
|
Thomas 'PointedEars' Lahn meinte: Gregor Kofler wrote: Gibt es eine Möglichkeit (habe ich eine Property eines Elementes übersehen?), im Submit-Handler eines Formulars den gewählten Submit-Button zu ermitteln? Ja. Die einzige Möglichkeit, die mir einfällt, ist, per click-Listener des Submit-Buttons eine global verfügbare Eigenschaft zu setzen, die Du dann im submit-_Listener_ des Formulars ausliest. Da reicht auch schon eine globale Variable (die eine Eigenschaft des Globalen Objekts ist -- dieses bitte standardkonform und nicht über `window' referenzieren). Das click-Event des input-Elements findet AIUI auf jeden Fall vor dem submit-Event des Formularelements statt. Nachdem es für mich ohnedies wünschenswert ist, diese AJAX-Funktionalität "näher" an das serverseitige Framework zu binden habe ich testhalber dem Form-Element die beiden Handler verpasst. form action="foo.php" method="POST" onsubmit="if(typeof(XHRForm) == 'object' && typeof(XHRForm.submit) == |
|
'function') { return XHRForm.submit(this); } else { return true; }" |
|
onclick="if(typeof(XHRForm) == 'object' && typeof(XHRForm.getSubmit) == 'function') { return XHRForm.getSubmit(event); } else { return true; }" |
|
[...] /form (die XHRForm-Methoden setzen dzt. einfach informative Alerts ab.) |
|
Ich bin total fertig: Das klappt auf Anhieb im IE und FF und Opera. |
|
Alter Schwede... Das die übergabe des event-Objekts im Handler so problemlos klappt, erstaunt mich. |
|
Da bin ich jetzt eher wie ein Skript-Kiddie unterwegs... |
#4
| |||
| |||
|
|
Gregor Kofler wrote: onsubmit="if(typeof(XHRForm) == 'object' && typeof(XHRForm.submit) == [...] 'function') { return XHRForm.submit(this); } else { return true; }" Etwas hypscher und zuverlässiger ist onsubmit="if (/\b(object|function)\b/i.test(typeof XHRForm) && XHRForm) { return XHRForm.submit(this); } else { return true; }" |
|
Da submit() aber hier wahrscheinlich eine benutzerdefinierte (und keine AOM/DOM-)Methode ist, sollte ein Vergleich mit "function" genügen: onsubmit="if (typeof XHRForm == "function") { return XHRForm.submit(this); } else { return true; }" |
|
Zudem sollte der Listener-Code in eine eigene Methode ausgelagert werden, um solcherlei Spaghetticode zu vermeiden. [...] |
#5
| |||
| |||
|
|
Thomas 'PointedEars' Lahn wrote: Da submit() aber hier wahrscheinlich eine benutzerdefinierte (und keine AOM/DOM-)Methode ist, sollte ein Vergleich mit "function" genügen: onsubmit="if (typeof XHRForm == "function") { return XHRForm.submit(this); } else { return true; }" onsubmit="if (typeof XHRForm == 'object' && XHRForm && typeof XHRForm.submit == "function") { return XHRForm.submit(this); } else { return true; }" |
#6
| |||
| |||
|
|
Thomas 'PointedEars' Lahn meinte: typeof XHRForm == 'object' && XHRForm ... Wann würde eigentlich das typeof auf true evaluieren und XHRForm auf false? |
#7
| |||
| |||
|
|
Thomas 'PointedEars' Lahn meinte: Gregor Kofler wrote: Thomas 'PointedEars' Lahn meinte: typeof XHRForm == 'object' && XHRForm ... Wann würde eigentlich das typeof auf true evaluieren und XHRForm auf false? XHRForm === null Ahja. Danke. |
![]() |
| Thread Tools | |
| Display Modes | |
| |