windhund: <form> action per JS. ändern? - IE

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();  
}
  1. 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 !

    1. 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

      1. Vielleicht geht's ja mit: document.forms[0].action.value = act;

        danke, werd's morgen mal probieren und berichten

        1. 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

          1. 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.

  2. 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

    --
    Männer haben nur eine Angst: Die Angst, kein Mann zu sein.
      (Liv Tyler, US-Schauspielerin)
    1. 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

      1. 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  
        
        
  3. 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.