Matthias: Ein Formular an eine von mehreren Seiten schicken, je nach Link

Hey,

ich habe ein kleines Problem. Ich habe eine Seite, auf der sich ein Formular befindet. Dort gibt es auch ganz normal einen submit button. Ich habe allerdings auch eine Menüleiste oben dran. Nun möchte ich, dass je nachdem welchen Link man drückt, das Formular mit Post an genau die Seite die im Link definiert ist, weitergegeben wird.
Dazu habe ich folgendes gefunden: "javascript:document.ding.submit();"
Allerdings schickt dass doch die Dateien immer an die im Formular mit action="" definierte Seite, oder stehe ich hier auf dem Schlauch? Kann man die Seite auch im Link definieren?
Wäre sehr dankbar für Hilfe,

Grüße Matthias

  1. Selber hey,

    lieber Matthias,

    habe ich folgendes gefunden: "javascript:document.ding.submit();"
    Allerdings schickt dass doch die Dateien immer an die im Formular mit action="" definierte Seite, oder stehe ich hier auf dem Schlauch? Kann man die Seite auch im Link definieren?

    mach dir erst einmal eine andere Vorstellung vom Vorgang:
    Der Browser richtet einen Request an den im Action-Attribut aufgeführte URi und sendet die Formulardaten als Requestparameter mit.

    Und dann ist es doch mit JavaScript ein Leichtes, den URi im Action-Attribut auszutauschen, so wie Du ihn benötigst. Das ist auch nur erforderlich, wenn es sich tatsächlich um Ressourcen aus unterschiedlichen Domains handelt, denn sonst könntest Du doch auch im Script auf dem Server entscheiden, welchem Bereich der request zuzuordnen ist.

    LG
    Chris©

    1. Hallo Chris,

      Und dann ist es doch mit JavaScript ein Leichtes, den URi im Action-Attribut auszutauschen, so wie Du ihn benötigst.

      danke für deine Antwort. Leider mit ich nicht besonders versiert in JavaScript, könntest du mir sagen wie man das dann ändert?
      Wäre das als attribut zu dem "javascript:document.ding.submit();" ?

      »»Das ist auch nur erforderlich, wenn es sich tatsächlich um Ressourcen aus unterschiedlichen Domains handelt, denn sonst könntest Du doch auch im Script auf dem Server entscheiden, welchem Bereich der request zuzuordnen ist.

      Das verstehe ich jetzt einfach nich^^, sorry.

      Grüße Matthias

      1. Hallo Matthias,

        Und dann ist es doch mit JavaScript ein Leichtes, den URi im Action-Attribut auszutauschen, so wie Du ihn benötigst.

        danke für deine Antwort. Leider mit ich nicht besonders versiert in JavaScript, könntest du mir sagen wie man das dann ändert?

        Wie wäre es mit ein paar Experimenten?
        Eine Zuweisung wäre sicherlich geeignet, das Ziel zu erreichen.

        Wenn man bei Google mit dem Suchtext

        http://www.google.de/search?q=Action-Attribut+mit+Javascript+ändern&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:de:official&client=firefox-a

        sucht, findet man z.B. al allerersten Treffer diesen Thread:

        http://forum.de.selfhtml.org/archiv/2004/3/t74576/

        »»Das ist auch nur erforderlich, wenn es sich tatsächlich um Ressourcen aus unterschiedlichen Domains handelt, denn sonst könntest Du doch auch im Script auf dem Server entscheiden, welchem Bereich der request zuzuordnen ist.

        Das verstehe ich jetzt einfach nich^^, sorry.

        Du hast leider bisher nur eine sehr dürftige Beschreibung Deiner Rahmenbedingungen gegeben, sonst könnte ich gezielter darauf eingehen.

        Nur kurz daher: Man kann alle Requests zu einer Domain auf ein einziges Script ausführen. Dieses entscheidet dann aufgrund der mitgesandten Request-Parameter, was es damit anfangen soll, und welche Antwort zusammengebaut werden soll. Es ist daher nicht notwendig, das Action-Attribut zu verändern, wenn alle Requests bei ein und derselben Domain landen sollen.

        LG
        Chris©

        1. Hallo Chris,

          würde das:

          <script language="javascript">
           function changeaction(link)
          {
              document.artForm.action = link
              document.artForm.method = "post"
              document.artForm.submit()
          }
          </script>

          in verbindung mit dem:

          <a href="../index.php?site=persdaten" class="style1" onClick="changeaction(../index.php?site=persdaten)">Pers&ouml;nliche Daten</a>

          dann funktionieren?
          Tut bei mir nämlich nich und ich bin mir nicht sicher obs am restcode oder daran liegt.

          Grüße Matthias

          1. Mahlzeit,

            <script language="javascript">

            Das "language"-Attribut hat ausgedient. Nutze stattdessen das "http://de.selfhtml.org/html/transit/scripts.htm#definieren@title=type"-Attribut.

            document.artForm.action = link

            1. Du sprichst in einer relativ allgemein gehaltenen Funktion ein spezifisches Formular an. Das ist keine gute Idee.

            2. Mach es Dir selbst einfacher und schließe jede Javascript-Anweisung mit einem ; ab - das macht den Code übersichtlicher und leichter verständlich.

            <a href="../index.php?site=persdaten" class="style1" onClick="changeaction(../index.php?site=persdaten)">Pers&ouml;nliche Daten</a>

            Das kann nicht funktionieren. Die Funktion erwartet offenbar, dass Du einen http://de.selfhtml.org/javascript/objekte/string.htm@title=String übergibst - das tust Du hier jedoch nicht.

            Tut bei mir nämlich nich und ich bin mir nicht sicher obs am restcode oder daran liegt.

            Das sagt Dir im Normalfall die Fehlerkonsole Deines Browser. Vernünftige Browser haben sowas.

            MfG,
            EKKi

            --
            sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
  2. Mahlzeit,

    ich habe ein kleines Problem. Ich habe eine Seite, auf der sich ein Formular befindet. Dort gibt es auch ganz normal einen submit button. Ich habe allerdings auch eine Menüleiste oben dran. Nun möchte ich, dass je nachdem welchen Link man drückt, das Formular mit Post an genau die Seite die im Link definiert ist, weitergegeben wird.

    Also soll die Menüleiste (bzw. die einzelnen Einträge dort) zum Abschicken dienen? Dann sollten das entsprechende Buttons (<input type="submit">) sein. Dem Formular könntest Du dann einen http://de.selfhtml.org/javascript/sprache/eventhandler.htm#onsubmit@title=onsubmit-Eventhandler verpassen, der überprüft, welcher der Menüpunkte angeklickt wurde, das Ziel des Formulars entsprechend ändert und danach dann abschickt.

    Dazu habe ich folgendes gefunden: "javascript:document.ding.submit();"

    Und wo und wie gedachtest Du diesen Schnipsel einzusetzen?

    Allerdings schickt dass doch die Dateien immer an die im Formular mit action="" definierte Seite, oder stehe ich hier auf dem Schlauch? Kann man die Seite auch im Link definieren?

    Man KANN fast alles. Und wenn Du hier (auszugsweise) Quellcode posten KANNST, KANN man Dir sicherlich auch konkreter weiterhelfen.

    Wäre sehr dankbar für Hilfe,

    Wie dankbar? Brauchst Du meine Kontonummer?

    MfG,
    EKKi

    --
    sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
    1. Hey, also das ist das menü:

      <ul id="MenuBar1" class="MenuBarHorizontal">
        <li><a href="../index.php?site=persdaten" class="style1">Pers&ouml;nliche Daten</a> </li>
        <li class="style1"><a href="#" class="MenuBarItemSubmenu style1">Studium</a>
            <ul>
              <li><a href="../index.php?site=studium" class="style1">Aktuelles Studium</a></li>
              <li><a href="../index.php?site=praktika" class="style1">Praktika/Jobs</a></li>
              <li><a href="../index.php?site=altstudium" class="style1">Vorangegangenes Studium</a></li>
              <li><a href="../index.php?site=schule" class="style1">Schule</a></li>
              <li><a href="../index.php?site=studiumsonstiges" class="style1">Sonstiges</a></li>
            </ul>
        </li>
        <li class="style1"><a href="#" class="MenuBarItemSubmenu style1">Kenntnisse</a>
            <ul>
              <li><a href="../index.php?site=sprache" class="style1">Sprache</a> </li>
              <li><a href="../index.php?site=edv" class="style1">EDV</a></li>
              <li><a href="../index.php?site=kenntnissesonstiges" class="style1">Weitere</a></li>
            </ul>
        </li>
        <li class="style1"><a href="#" class="MenuBarItemSubmenu style1">AC</a>
            <ul>
              <li><a href="../index.php?site=aufmerksam" class="style1">Wie bist du auf uns aufmerksam geworden?</a></li>
              <li><a href="../index.php?site=interview" class="style1">Interviewtermin</a></li>
            </ul>
        </li>
        <li><a href="../index.php?site=mot" class="style1">Motivationsschreiben</a></li>
        <li><a href="../index.php?site=all" class="style1">Zusammenfassung</a></li>
        <p>&nbsp;</p>
       </ul>

      Also soll die Menüleiste (bzw. die einzelnen Einträge dort) zum Abschicken dienen?

      Genau.

      Dem Formular könntest Du dann einen http://de.selfhtml.org/javascript/sprache/eventhandler.htm#onsubmit@title=onsubmit-Eventhandler verpassen, der überprüft, welcher der Menüpunkte angeklickt wurde, das Ziel des Formulars entsprechend ändert und danach dann abschickt.

      Dazu habe ich folgendes gefunden: "javascript:document.ding.submit();"

      Und wo und wie gedachtest Du diesen Schnipsel einzusetzen?

      öhm^^, ich dachte dass man das vlt. mit einem action tag oder so versehen kann...

      Wäre sehr dankbar für Hilfe,

      Wie dankbar? Brauchst Du meine Kontonummer?

      Mit deiner Onlinebanking PIN und deinen TANs schon

      Grüße Matthias

      1. Hallo Matthias,

        Wie dankbar? Brauchst Du meine Kontonummer?

        Mit deiner Onlinebanking PIN und deinen TANs schon

        Du kannst meine Kontonummer haben, mit Einzahlungsermächtigung.
        Dafür brauchst Du keine PIN oder TAN.
        Nur bitte nicht ans Finanzamt weitergeben, die kennen die Nummer noch nicht.

        LG
        Chris©

        1. Hallo,

          Wie dankbar? Brauchst Du meine Kontonummer?
          Mit deiner Onlinebanking PIN und deinen TANs schon

          ;-)

          Du kannst meine Kontonummer haben, mit Einzahlungsermächtigung.

          Ich habe doch tatsächlich erst "Einzugsermächtigung gelesen und wollte schon sagen: "Ich auch, ich auch!"

          Nur bitte nicht ans Finanzamt weitergeben, die kennen die Nummer noch nicht.

          Das finden die aber ganz schnell raus, keine Sorge - schließlich dürfen (oder müssen?) die Banken doch mittlerweile Auskunft ans Finanzamt geben.

          Ciao,
           Martin

          --
          Wenn Zeit das Kostbarste ist, was wir haben, dann ist Zeitverschwendung die größte aller Verschwendungen.
            (Benjamin Franklin, amerikanischer Tüftler und Politiker)
      2. Mahlzeit,

        <ul id="MenuBar1" class="MenuBarHorizontal">
          <li><a href="../index.php?site=persdaten" class="style1">Pers&ouml;nliche Daten</a> </li>

        Das sind Links zu anderen Seiten. Was GENAU willst Du? Willst Du per Link zu einer anderen Seite verweisen oder willst Du ein Formular abschicken? Wenn letzteres - nimm das entsprechende HTML-Element: <http://de.selfhtml.org/html/formulare/klickbuttons.htm#modern@title=<button>> (alternativ könntest Du natürlich auch <http://de.selfhtml.org/html/formulare/formularbuttons.htm#herkoemmlich@title=<input type="submit">> verwenden, wenn Du davon ausgehen musst, dass die Besucher Deiner Seite(n) keinen vernünftigen Browser verwenden).

        öhm^^, ich dachte dass man das vlt. mit einem action tag oder so versehen kann...

        Action-Tag? Kenne ich nicht. HTML auch nicht.

        MfG,
        EKKi

        --
        sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
        1. hey,

          <ul id="MenuBar1" class="MenuBarHorizontal">
          <li><a href="../index.php?site=persdaten" class="style1">Pers&ouml;nliche Daten</a> </li>

          Davon habe ich ja mehrere, und der Nutzer soll, nachdem er das Formular ausgefüllt hat, jeden davon anklicken können, und je nachdem welchen er anklickt, soll die Seite, die in dem action="" beim <form> Element benannt ist, anders sein.
          Also wenn er jetzt Studium klickt, soll das Formular mit action="index.php?site=studium" sein, wenn er Motivationsschreiben klickt, action="index.php?site=mot".

          öhm^^, ich dachte dass man das vlt. mit einem action tag oder so versehen kann...

          Action-Tag? Kenne ich nicht. HTML auch nicht.

          Damit meinte ich so etwas in der art wie der Befehl action="" bei einem <form> Element. macht das mehr Sinn?

          Grüße Matthias

          1. Mahlzeit,

            Davon habe ich ja mehrere, und der Nutzer soll, nachdem er das Formular ausgefüllt hat, jeden davon anklicken können, und je nachdem welchen er anklickt, soll die Seite, die in dem action="" beim <form> Element benannt ist, anders sein.

            Dann soll der Benutzer also nicht direkt zu der im Link angegebenen Adresse springen, sondern das auf der Seite angebene Formular soll an die Adresse geschickt werden?

            Dann nutze statt der Links die zum Absenden von Formularen vorgesehenen HTML-Elemente - ich hatte sie Dir genannt.

            Also wenn er jetzt Studium klickt, soll das Formular mit action="index.php?site=studium" sein, wenn er Motivationsschreiben klickt, action="index.php?site=mot".

            Das habe ich schon verstanden. Und ich habe Dir bereits einen Vorschlag zur Problemlösung gemacht. Du bist darauf nicht eingegangen - weil Du gerade dabei bist, Dich damit zu beschäftigen? Weil Du ihn nicht verstanden hast? Weil Du in ignoriert hast, da ich bestimmt irgendwann nachgebe und Dir fertigen Code als Komplettlösung schicke?

            Ich hoffe ersteres, befürchte zweiteres und falls letzteres zutrifft: vergiss es.

            öhm^^, ich dachte dass man das vlt. mit einem action tag oder so versehen kann...

            Action-Tag? Kenne ich nicht. HTML auch nicht.

            Damit meinte ich so etwas in der art wie der Befehl action="" bei einem <form> Element. macht das mehr Sinn?

            Befehle kennt HTML auch nicht. :-)

            Aber Du kannst per http://de.selfhtml.org/javascript/objekte/forms.htm#action@title=Javascript sehr gut das "http://de.selfhtml.org/html/formulare/definieren.htm#zielfenster@title=action"-Attribut eines Formulars ändern. Und anschließend <http://de.selfhtml.org/javascript/objekte/forms.htm#submit@title=das Formular abschicken>. Wenn Du dies beides in eine Funktion packst, die Du dann <http://de.selfhtml.org/javascript/sprache/eventhandler.htm#onsubmit@title=beim Absenden> des Formulars aufrufst, hast Du doch alles, was Du willst?

            Alternativ könntest Du die Funktion natürlich auch <http://de.selfhtml.org/javascript/sprache/eventhandler.htm#onclick@title=beim Klicken> auf z.B. die Menüeinträge aufrufen.

            MfG,
            EKKi

            --
            sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
            1. Hey,

              Das habe ich schon verstanden. Und ich habe Dir bereits einen Vorschlag zur Problemlösung gemacht. Du bist darauf nicht eingegangen - weil Du gerade dabei bist, Dich damit zu beschäftigen? Weil Du ihn nicht verstanden hast? Weil Du in ignoriert hast, da ich bestimmt irgendwann nachgebe und Dir fertigen Code als Komplettlösung schicke?

              Ich hoffe ersteres, befürchte zweiteres und falls letzteres zutrifft: vergiss es.

              Als ich das gelesen hab war es sowohl ersteres als auch zweiteres.

              Mittlweile hab ichs verstanden.
              Das:

              <script type="text/javascript">
               function changeaction(link)
              {
                  document.form1.action = link
                  document.form1.method = "post"
                  document.form1.submit()
              }
              </script>

              Und das:
              <a href="./index.php?site=persdaten" class="style1" onclick="changeaction(this.href); return false;">

              does the job.

              Nur was ich nicht wusste, ist dass es nicht funktioniert, wenn man irgendwo auf der Seite sonst noch einen input name="submit" oder id="submit" hat.
              Nachdem ich die alle rausgelöscht hatte, gings.

              Vielen Dank nochmal an dich und auch an Chris

              Matthias

              1. Mahlzeit,

                <script type="text/javascript">
                function changeaction(link)
                {
                    document.form1.action = link
                    document.form1.method = "post"
                    document.form1.submit()
                }
                </script>

                <a href="./index.php?site=persdaten" class="style1" onclick="changeaction(this.href); return false;">

                Nur was ich nicht wusste, ist dass es nicht funktioniert, wenn man irgendwo auf der Seite sonst noch einen input name="submit" oder id="submit" hat.

                Einerseits sollte man nie einen Namen vergeben, den es als Bezeichnung eines Elements oder einer Funktion bereits gibt (aus Gründen der Eindeutigkeit - woher soll der Browser wissen, mit welchem Objekts namens "submit" er was tun soll?). Andererseits solltest Du an Deine Funktion das Formular übergeben, das Du abschicken willst - dann kannst Du sie prima universell benutzen:

                <script type="text/javascript">  
                [code lang=javascript]function changeaction(frm, url) {  
                  if (frm && url != '') {  
                    frm.action = url;  
                    frm.method = 'post';  
                    frm.submit();  
                    return false;  
                  }  
                }
                

                </script>

                <a href="./index.php?site=persdaten" class="style1" onclick="changeaction(document.form1, this.href);">[/code]

                (Vorausgesetzt, die setzt Links innerhalb des Formulars, das Du abschicken willst.)

                MfG,
                EKKi

                --
                sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
                1. Hallo Ekki,

                  <script type="text/javascript">

                  [code lang=javascript]function changeaction(frm, url) {
                    if (frm && url != '') {
                      frm.action = url;
                      frm.method = 'post';
                      frm.submit();
                      return false;
                    }
                  }

                  
                  > </script>  
                  >   
                  > <a href="./index.php?site=persdaten" class="style1" onclick="changeaction(document.form1, this.href);">[/code]  
                    
                  Schön, aber noch etwas unausgereift: Vergleiche wie url != '' machen selten Sinn.  
                  Wenn z.B. url === 1 gilt, ergibt der Vergleich url != '' auch true, d.h. (frm && url)... führt genau zum gleichen Ziel (frm && url != ''), aber ohne einen String-Vergleich vorzugaukeln.  
                    
                  Noch allgemeiner wäre es so:  
                    
                  ~~~html
                  <script type="text/javascript">  
                    
                  [code lang=javascript]  
                      function formAction(frm, address, send, how) {  
                    
                        if (frm && address) {  
                    
                          frm.action = address;  
                          frm.method = how || 'post'; // => post ist default-Wert  
                          if (send) {  
                              frm.submit();  
                              return false;  
                          }  
                          return;  
                        }  
                  }
                  

                  </script>

                  <a href="./index.php?site=persdaten" class="style1" onclick="formAction(document.form1, this.href, true);">

                  <!-- oder erst mal alles einstellen: -->

                  <script type="text/javascript">

                    
                    
                      formAction(document.form1, this.href, false, 'get');  
                  
                  

                  </script>

                  <!-- und dann nur noch abschicken: -->

                  <a href="./index.php?site=persdaten" class="style1" onclick="document.form1.submit()">[/code]

                  Damit lassen sich bei Bedarf die Parameter auch erst einmal einstellen, ohne das Formular gleichzeitig abzuschicken.

                  Gruß, Don P