Thomas Schmieder, Kai Burow: Submit

Hallo Forum

wir basteln an einem Formular aus drei Frames:

+---------------------------------------+
  | head.htm                              |
  +---------------------------------------+
  |   ID  name1  telefon1   [EDIT]        |  body.asp
  |   ID  name2  telefon2   [EDIT]        |
  |   ID  name3  telefon3   [EDIT]        |
  |   ID  name4  telefon4   [EDIT]        |
      ...
  |   ID  namen  telefonn   [EDIT]        |
  +---------------------------------------+
  |   [zurück] [vor]                      |  footer.htm
  +---------------------------------------+

Jede Zeile im body-Frame ist zur Zeit ein <Form action="edit.asp" ID="zeilex" ... >

Wir wollen erreichen, dass beim klicken auf [vor] die letzte Zeile im body abgeschickt wird.

1. wir wissen nicht, wieviele Zeilen es jeweils sind. Die Maximalzahl ist parametriersierbar (z.B. 10).
2. wir können per asp-Script beliebige Variablen im Body-Frame mit ausgegebn lassen, so z.B. maxZeileNr.

Wie können wir am geschicktesten die jeweils letzte Zeile mit submit() übertragen lassen? Wie kann man das Submit-Ziel, das ja eigentlich in <form action"   " schon festgelegt ist, noch ändern?

Welcher Typ Variable ist am geschicktesten?

  • input type=hidden
  • JavaScript-Variable
  • per VB-Script eine entsprechende Funktion mit an body übergeben.

Ihr seht uns hier mit großen Augen auf den Bildschirm starren, in der Hoffnung, dass eine(r) eine gute Idee hat.

Liebe Grüße

Tom und Kai

  1. Hallo

    also so wie ich das verstanden habe wollt ihr, mit dem Button [vor] die letzte Zeile abschicken?

    Mit asp könnt ihr demnach eine JS Variable setzen, z.b:

    maxZeilen = ASP_maxZeilen (weiß nicht wie das in asp genau geht, ist aber möglich)

    <input type="button" value="vor" onClick="SendLast()">

    Dann bracuht ihr noch ne Funktion SendLast():

    function SendLast()
             {
             document.forms[maxZeilen-1].action = "neuesZiel.html";
             document.forms[maxZeilen-1].submit();
             }

  2. Hallo,

    1. wir wissen nicht, wieviele Zeilen es jeweils sind. Die Maximalzahl ist parametriersierbar (z.B. 10).

    Das macht an sich nichts. Du kannst die Anzahl der Formulare einfach mit Javascript durch "document.forms.length" abfragen. Damit kannst Du auch sofort das letzte Forumlar ansprechen: "document.forms[document.forms.length]"

    1. wir können per asp-Script beliebige Variablen im Body-Frame mit ausgegebn lassen, so z.B. maxZeileNr.

    Das ist unnötig. s.o.
    Das Problem an der ganzen Sache ist, daß Eure Lösung mit einem Vor-Knopf in einem anderen Frame nur mittels JavaScript realisierbar ist. Ansonsten ist ein Benutzereingriff im Body-Frame notwendig, was ihr aber anscheinend ja nicht wollt. Sonst könntet ihr Euch ja den Vor-Knopf sparen.

    Wie können wir am geschicktesten die jeweils letzte Zeile mit submit() übertragen lassen? Wie kann man das Submit-Ziel, das ja eigentlich in <form action"   " schon festgelegt ist, noch ändern?

    <inputy type="button" .. onClick="parent.frames["body"].document.forms[xxx].submit()"> übertragt das Formular xxx im Body-Frame.

    Meine Methode, um das Verweisziel zu ändern ist mir nicht bekannt. Was man machen könnte:
    Man generiert mit JavaScript einen Get-String, den man auch mit JavaScript an den Server senden kann. Man kann alle Formularinhalte auslesen und entsprechend verknüpfen. Falls die Daten mit POST übertragen werden sollen, kenne ich keine Lösung.

    • input type=hidden

    IMHO die beste Lösung, da man so immer noch eine Notlösung für Leute OHNE JS bauen kann. im <noscript>-Bereich kann man dann einfach ein Submit-Button einfügen, den man ja nicht sieht, wenn man JS aktiv hat.
    So kann man auch ohne JS die Daten zum Server übertragen.

    • JavaScript-Variable

    Würde ich wg. der fehlenden Möglichkeit der "Notlösung" (s.o.) nicht machen. An sich ginge dies aber auch. Dann muß man allerdings bedenken, daß nur die Methode in Frage kommt, wo man mit JS den GET-String bastelt und den an den Server überträgt.

    • per VB-Script eine entsprechende Funktion mit an body übergeben.

    VB ist nicht so meine Sache und funktioniert nur im IE. So würde ich es NICHT machen.

    Viele Grüße und viel Erfolg...

    Alex :)

    1. Ich muß mich hier an zwei Stellen noch mal verbessern:

      Es gibt in JS doch zwei Möglichkeiten, um eine neue "action" zu setzen und die Art der Übertragung zu ändern.

      mit document.forms[xx].action = "cgi-bin/cgi.pl" kann man ein neues Action-Ziel setzen und mit document.forms[xx].method = "post" kann man die Übertragungsmethode ändern.

      Viele Grüße...

      Alex :)

  3. Vielen Dank an Alexander und an uepselon.

    Die Antworten treffen auf den Punkt. Ich werde es gleich ausprobieren :-)))

    Noch kurz was zu Alexander: die VB-Variante entspricht einer PHP-Variante und wird auf dem Server berechnet. Ich bevorzuge PHP und Apache. Kai muss aber für sein Praktikum, dass er bei mir macht, ein sinnvolles Projekt durchführen und beschäftigt sich deshalb mit ASP (nicht weil das sinnvoller ist, als PHP, sondern weil er uns das dann hier intern auch verklickern kan hinterher)

    Also nochmals vielen Dank

    Tom

    1. Noch kurz was zu Alexander: die VB-Variante entspricht einer PHP-Variante und wird auf dem Server berechnet.

      Ach so, ich dachte an das VB-Script hier: http://selfhtml.teamone.de/dhtml/modelle/microsoft.htm#scriptsprachen

      Viele Grüße und schönes WE

      Alex :)