form.submit bei IE und Mozilla
André
- javascript
Hallo,
ich habe folgendes Problem:
Für eine mit PHP erstellte Seite muss ich über einen Link mehrmals ein paar Variablen via POST übergeben. Realisieren tue ich dies, indem ich für jeden Link ein Formular generiere in der Form
<form method='post' action='$_SERVER[PHP_SELF]' style=display:inline;'>
<input type='hidden' name='variable1' value='$variable1'>
[...]
<a href='javascript:this.form.submit();'>Link</a>
</form>
Leider funktioniert das so nicht. Weiß einer, wie ich das Skript oben so ändern könnte, dass der mir immer das aktuelle Formular abschickt? Ich will keinen eigenen Namen für das Formular vergeben, weil ich wie gesagt alle Formulare auf der Seite dynamisch generiere und dann doch für jedes einen eigenen Bezeichner bräuchte bzw. dessen Objekt-id wissen müsste?
Ich habs auch schon anders probiert, indem ich ein zentrales Formular am Seitenanfang genommen hab und darin immer nur die einzelnen value-Werte über JavaScript anpasse. Abgesendet hab ich das dann bisher über
document.getElementsByName("formularname")[0].submit();
allerdings klappt das bei mir nur im IE; NS/Mozilla interpretieren diese Anweisung nicht, wenn sie außerhalb von <form>...</form> steht. (Ans Ende der Seite kann ich das schließende </form>-Tag aber leider auch nicht setzen, weil ich im Einzelfall noch paar andere Formulare auf der Seite hab und der dann Formulare in Formularen auch nicht richtig interpretieren kann)
Kurz also: Hat irgendjemand eine Idee, ein Formular über mehrere Links abzuschicken, was sowohl im IE als auch im Mozilla funktioniert, und was nicht zwingend einen eigenen Formularnamen (siehe DOM) voraussetzt?
Danke im Voraus ...
André
Hi,
<form [...] style=display:inline;'>
der Attributwert *muss* in Anführungszeichen stehen. Ganz besonders das abschließende Singlequote, welches übrigens keine gültige CSS-Syntax ist.
<a href='javascript:this.form.submit();'>Link</a>
"this" hat in dem Kontext keine form-Eigenschaft.
Leider funktioniert das so nicht.
"Funktioniert nicht" funktioniert nicht. Fehlerbeschreibung, bitte.
Weiß einer, wie ich das Skript oben so ändern könnte, dass der mir immer das aktuelle Formular abschickt?
Beginne mit einer günstigen Definition des Begriffes "aktuelles Formular". Ermittle anschließend, wie Du aus dem Kontext des Links zu dem dieser Definition entsprechenden Objekt findest.
document.getElementsByName("formularname")[0].submit();
getElementsByName ist keine in DOM existierende Methode.
NS/Mozilla interpretieren diese Anweisung nicht, wenn sie außerhalb von <form>...</form> steht.
Es ist erstaunlich, dass sie sie _überhaupt_ interpretieren. Übrigens kann Netscape kein DOM, jedenfalls nicht z.B. Netscape 3 oder 4.
Cheatah
Hallo,
danke für die schnellen Antworten.
@Cheatah
im html-Dokument soll irgendwo ein Formular stehen, welches ich über einen Link direkt abschicken kann (genau wie über <input type=submit>)
[...] irgendwelcher Text
<form method='post' action='$_SERVER[PHP_SELF]'>
<input type='hidden' name='variable1' value='$variable1'>
<a href='javascript:this.form.submit();'>Link</a>
</form>
und zwar eben mit einem Textlink. Bisher kommt da die Fehlermeldung "this.form ist null oder kein Objekt".
Und ich würde eben doch gern, dass die Seite sowohl im IE als auch im Mozilla funktioniert.
Stimmt ... CSS-Formatierung wäre noch ne echte Möglichkeit, obwohl da sowas wie a:hover-Effekte nicht gehen wird *hmm*
Vielleicht gibts da ja noch ne Möglichkeit mit meinen Formularen :-/
Danke
André
Hi,
im html-Dokument soll irgendwo ein Formular stehen, welches ich über einen Link direkt abschicken kann (genau wie über <input type=submit>)
wie Andreas schon impliziert: Es ist Dir völlig egal, ob es sich um einen Link _handelt_. Es soll nur so _aussehen_.
Bisher kommt da die Fehlermeldung "this.form ist null oder kein Objekt".
Den Grund kennst Du jetzt. Und dass in vielen Fällen einfach gar nichts passiert, weil JavaScript unbekannt oder deaktiviert ist, ist Dir natürlich klar.
Stimmt ... CSS-Formatierung wäre noch ne echte Möglichkeit, obwohl da sowas wie a:hover-Effekte nicht gehen wird *hmm*
Selbstverständlich, bis auf in veralteten Browsern wie Netscape 4 oder dem IE.
Cheatah
hi,
document.getElementsByName("formularname")[0].submit();
getElementsByName ist keine in DOM existierende Methode.
seit wann denn das nicht mehr?
ist http://selfhtml.teamone.de/javascript/objekte/document.htm#get_elements_by_name etwa obsolet, oder war gar noch nie korrekt?
bitte um aufklärung.
gruss,
wahsaga
Hi,
getElementsByName ist keine in DOM existierende Methode.
seit wann denn das nicht mehr?
in http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html finde ich sie jedenfalls nicht.
ist http://selfhtml.teamone.de/javascript/objekte/document.htm#get_elements_by_name etwa obsolet, oder war gar noch nie korrekt?
Frag mal Stefan, was mit "HTML-Variante des DOM" gemeint ist :-) Ich gehe gewöhnlich nach o.g. URL und sehe alles andere als Erweiterungen (z.B. auch innerHTML).
Cheatah
Hallo André,
<form method='post' action='$_SERVER[PHP_SELF]' style=display:inline;'>
<input type='hidden' name='variable1' value='$variable1'>
[...]<a href='javascript:this.form.submit();'>Link</a>
</form>
a ist kein Formularelement - auch wenn es innerhalb von <form></form> steht - und kennt daher this.form nicht. Du könntest stattdessen einen Button verwenden und das Formular onClick abschicken. Mit CSS kannst Du diesen Button so formatieren, dass er wie ein Link aussieht, falls Du das unbedingt brauchst.
Grüße
Andreas