<form> action per JS. ändern? - IE
windhund
- javascript
moin
Ich mir JS zusammengebaut, das mir per Mouseklick (oder per anderen Events) das action="" attribut einer Form dyn. ändern soll, da ich für eine Form 3 (oder mehrere) unterschiedliche actions sprich Scripte habe (PHP/Zend).
Einer davon ist der ZEND Paginator (das nur am Rande). Die Form ist ziemlich fett und hat mehrere Dutzend "hidden" Felder, es wäre also *recht* hässlich für *jede* einzelne action eine eigene Form zu bauen :( -- obwohl das aus PHP-Sicht auch nicht so traurig wäre, ich lass mir alle "hidden" felder bequem über entsprechende Arrays schleifenmässig ausgeben.
wie auch immer, im Mozilla gehts, der beklagt sich nicht, aber IE weigert sich standhaft:
"Objekt unterstützt diese Eigenschaft oder Methode nicht"
(wie) lässt sich das beheben? <form> action dynamich verändern, kann ich das für IE gänzlich vergessen?
Danke, Gruß
function senden(id) {
act = document.forms[0].faction.value;
act += pageid;
document.forms[0].target = "_self";
// bis hierhin und nicht weiter, so IE
document.forms[0].action = act
document.forms[0].submit();
}
pardon :( fehler eingeschlichen. so ist der Code
function senden(pageid) {
act = document.forms[0].faction.value;
act += pageid;
document.forms[0].target = "_self";
// bis hierhin und nicht weiter, so IE
document.forms[0].action = act
document.forms[0].submit();
}
'pageid' ist ein string, wie auch 'act' gesamt !
Hallo,
act = document.forms[0].faction.value;
Was soll "faction" für eine Eigenschaft sein?
Meinst du "fashion" oder so? ;-)
document.forms[0].action = act
Vielleicht geht's ja mit: document.forms[0].action.value = act;
Gruß, Don P
Vielleicht geht's ja mit:
document.forms[0].action.value = act;
danke, werd's morgen mal probieren und berichten
OK ich gebe mich geschlagen. Wir haben hier nämlich ne andere Applikation, wo -eben- dies gemacht wurde, und siehe da, keinerlei Fehler weder Mozilla noch IE 0_o. Es -gibt- eine Lösung und wir haben alles hier.
Nicht, daß ich das vorher hätte wissen können -bevor- ich hier poste.. :-)
Naja falls jmd. noch vor demselben Prob. steht, ich kann den Code gern nochmal rauskramen.
Ich wäre aber glücklicher, wenn man sowas an Ort und Stelle verbeispielen könnte (da wo's auch hingehört, ne?)
http://de.selfhtml.org/javascript/objekte/forms.htm#action@title=http://de.selfhtml.org/javascript/objekte/forms.htm#action
OK ich gebe mich geschlagen. Wir haben hier nämlich ne andere Applikation, wo -eben- dies gemacht wurde, und siehe da, keinerlei Fehler weder Mozilla noch IE 0_o.
Ja, weil es vermutlich kein Element mit der ID 'submit' im Formular gibt.
Naja falls jmd. noch vor demselben Prob. steht, ich kann den Code gern nochmal rauskramen.
Wenn du den rauskramen könntest, der _nicht_ funktionierte, dann wäre das ganze vermutlich anschaulicher.
Ich wäre aber glücklicher, wenn man sowas an Ort und Stelle verbeispielen könnte (da wo's auch hingehört, ne?)
http://de.selfhtml.org/javascript/objekte/forms.htm#action@title=http://de.selfhtml.org/javascript/objekte/forms.htm#action
Was soll man das "verbeispielen"? Das das action Attribut beschreibar ist steht ja da. Das man http://de.selfhtml.org/javascript/objekte/forms.htm#submit@title=submit() nicht überschreiben sollte steht auch da.
Das der IE manchmal seltsame Sachen macht, ist halt Erfahrung, die man sammeln muss.
Struppi.
Hallo,
Ich mir JS zusammengebaut
ich beeindruckt. ;-)
das mir per Mouseklick (oder per anderen Events) das action="" attribut einer Form dyn. ändern soll, da ich für eine Form 3 (oder mehrere) unterschiedliche actions sprich Scripte habe (PHP/Zend).
Der übliche Weg wäre, drei verschiedene Submit-Buttons zu benutzen und im serverseitigen Script den benutzten Button abzufragen und abhängig davon auf verschiedene Routinen zu verzweigen. Das Ändern des action-Attributs mit Javascript hat für mich immer so den Beigeschmack einer Krücke.
Die Form ist ziemlich fett ...
"form" ist das englische Äquivalent für "Formular". Also "die Formular"? Passt irgendwie nicht ...
"Objekt unterstützt diese Eigenschaft oder Methode nicht"
(wie) lässt sich das beheben? <form> action dynamich verändern, kann ich das für IE gänzlich vergessen?
Wie sieht das zugrundeliegende HTML aus?
function senden(id) {
act = document.forms[0].faction.value;
Und es gibt ein Element mit dem Namen "faction" im Formular?
act += pageid;
document.forms[0].target = "_self";
Das dürfte überflüssig sein, "_self" ist der Defaultwert.
// bis hierhin und nicht weiter, so IE
document.forms[0].action = act
document.forms[0].submit();
}
Das einzige, was mir auffällt, ist das fehlende Semikolon. Auch wenn das in JS nicht vorgeschrieben ist: Ergänze das mal. Den Aufruf von submit() kannst du dir übrigens sparen - so wird das Formular zweimal abgesendet.
SO long,
Martin
Der übliche Weg wäre, drei verschiedene Submit-Buttons zu benutzen und im serverseitigen Script den benutzten Button abzufragen und abhängig davon auf verschiedene Routinen zu verzweigen. Das Ändern des action-Attributs mit Javascript hat für mich immer so den Beigeschmack einer Krücke.
das ist ja nicht das Prob, ich könnte auch ein 'hidden' Feld mit einem def. Wert neu beschreiben, alles in derselben JS Routine, da meckert selbst der IE nicht rum. aber meine Frage war und ist, warum der IE das nicht akzeptiert?
»» Die Form ist ziemlich fett ...
"form" ist das englische Äquivalent für "Formular". Also "die Formular"? Passt irgendwie nicht ...
ja klar, das Formular, bzw. <form>
Wie sieht das zugrundeliegende HTML aus?
das hab ich im Büro :) aber das HTML ist problemlos. Es sind zwar mehrere Forms (pardon mehrere <form>) aber die werden schon korrekt behandelt und gesendet. Bis auf eben diese bek*** form.action...
»» function senden(id) {
»» act = document.forms[0].faction.value;
Und es gibt ein Element mit dem Namen "faction" im Formular?
ja gibt es, in einem 'hidden'. bedeutet nicht mehr wie "formular action" deshalb 'faction'. ein string. in der zitierten JS routine wird daran einfach die Seitenzahl für den ZEND-Paginator angehängt und daraus die betreffende <form> action gebildet. passt alles soweit, ist ein string, ich hab ihn mir per alert() auch debuggen lassen.
Die URLS, die die <form> aufrufen soll sehen etwa aus wie
http://server/de/index/send/page/1
http://server/de/index/send/page/2
http://server/de/index/send/page/x
usw.
was bei PHP 'Scripte' wären, sind beim ZEND-MVC "Controller". klar, ich könnte die ganze Sache auf *einen* einzigen Controller umbauen, was letztlich auch auf *eine* <form> action hinauslaufen würde. was aber mühselig wäre, es wären mal eben mehrere Hundert Zeilen Code umzubauen :-/
daher muss ich diese JS Routine irgendwie hinkriegen.
Der Kollege weiter unten im Thread schlug vor statt
document.forms[0].action = act
dies hier:
document.forms[0].action.value = act
das werd ich morgen mal probieren.
und bei Stefan Münz:
http://de.selfhtml.org/javascript/objekte/forms.htm#action
steht auch nicht viel mehr da wie lapidar, joa, man kann die form action lesen _und_ ändern. bleibt uns den Beweis aber noch schuldig O_o. Diese action auslesen und ausgeben lassen kann ja wohl jeder Idiot *pardon*
Gruß
Windhund
Hallo,
Der Kollege weiter unten im Thread schlug vor statt
document.forms[0].action = act
>
> dies hier:
> `document.forms[0].action.value = act`{:.language-javascript}
>
> das werd ich morgen mal probieren.
Sorry, das war ein Irrtum meinerseits, denn das <http://de.selfhtml.org/html/referenz/attribute.htm#form@title=action>-Attribut muss vom Typ #CDATA sein, ein String mit dem URI des formularverarbeitenden Scripts.
action.value kann also nicht funktionieren, denn dazu müsste es ein Objekt sein.
Gruß, Don P
wie auch immer, im Mozilla gehts, der beklagt sich nicht, aber IE weigert sich standhaft:
"Objekt unterstützt diese Eigenschaft oder Methode nicht"
Kann es sein, dass das fette Formular ein Element mit der id oder dem Namen 'submit' hat?
Struppi.