Kris: Submit -> varCheck -> popup -> Variablen fehlen

Guten Mittag allerseits :)

ich tüftel grad an einem kleinem Problem und bin ein wenig gestresst von der Sonne. Daher vielleicht ein überfrühtes Posting, aber ich muss eh gleich erstmal neue Getränke kaufen. Eventuell kann mir ja wer von euch derweil helfen.

Ich lasse ein Formular durchlaufen und verweise im Form-Tag via onsubmit auf eine JS Funktion.

<form name="abfrage" action="" method="post" onsubmit="check();">

Der Check endet sofern alle Werte korrekt übergeben wurden mit einer Weiterleitung zu einer weiteren JS-Funktion die ein popup inkl. angegebener URL aufruft.

// Ausgeben eines Alerts falls ein Feld falsch eingegeben wurde
  if (al == 0) {alert("Bitte geben sie in die Felder gültige Werte ein");}
// Falls alles korrekt ist weiter zum popup
  else {popup('calc.php');}

Nun ist mir natürlich klar das in dem Popup das aufgerufen wird nicht mehr meine, vom Formular übergebenen Variablen, enthalten sind. Dise brauche ich dort jedoch. Wie ist es am cleversten diese dor zu verpacken ?

Bin ich das Problem falsch angegangen und sollte per Return (True/False) das Submit stoppen/zulassen. Falls ja wie kriege ich es hin das ich DANN per Action mein Popup geöffnet kriege. Oder gibt es eine Möglichkeit mit HTML/Submit ein Popup aufzurufen dessen Größe und Inhalt ich bestimmen kann ?

mfg

Kris

  1. hi,

    Nun ist mir natürlich klar das in dem Popup das aufgerufen wird nicht mehr meine, vom Formular übergebenen Variablen, enthalten sind. Dise brauche ich dort jedoch. Wie ist es am cleversten diese dor zu verpacken ?

    Nutze target im form, um auf das Popup zu zielen.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. hi,

      Nun ist mir natürlich klar das in dem Popup das aufgerufen wird nicht mehr meine, vom Formular übergebenen Variablen, enthalten sind. Dise brauche ich dort jedoch. Wie ist es am cleversten diese dor zu verpacken ?

      Nutze target im form, um auf das Popup zu zielen.

      gruß,
      wahsaga

      sowas ähnliches habe ich mir schon gedacht :)
      nur kriege ich das gerade nicht unter einen Hut.
      Was genau trage ich beim Target ein ? Ich bin ein wenig verwirrt entschuldigt :)

      1. hi,

        Was genau trage ich beim Target ein ?

        Das, was du immer als target benutzt - einen Fensternamen.

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. Was genau trage ich beim Target ein ?

          Das, was du immer als target benutzt - einen Fensternamen.

          Das hatte ich bereits probiert :

          so sieht die Popup Function aus :
          function popup(url) {
            var breite = 350;
            var hoehe = 350;
            var links = (screen.width-breite)/2;
            var oben = (screen.height-hoehe)/2;
            Fenster = window.open(url ,"Berechnung", "width="+breite+",height="+hoehe+",left="+links+",top="+oben+",resizable=no");
            Fenster.focus();
          }

          und so sieht mein Form aus :
          <form name="abfrage" action="" method="post" target="Berechnung">

          und dennoch hab ich die Variablen nicht in meinem neuen Fenster O_o

  2. Hallo,

    Grundsätzlich:
    Formulardaten in Popup-Fenster leiten

    Wichtig ist:

    • Das action-Attribut des form-Elements sinnvoll füllen.
    • Das target-Attribut mit dem Namen des geöffneten Fensters füllen. (Wie wahsaga wahrsagte.)

    Die Adresse, die du window.open() übergibst, ist hingegen unwichtig. Die wird direkt nach dem Öffnen des Fensters eh überschrieben, schließlich leitet das target-Attribut das Formular-Absenden in das Fenster. Deshalb übergibt man üblicherweise »about:blank« oder ruft erst einmal für die paar Millisekunden ein anderes leeres Dokument auf.

    Mathias

  3. Bin ich das Problem falsch angegangen und sollte per Return (True/False) das Submit stoppen/zulassen.

    Ja, wenn eine Eingabe falsch ist, zeigst du einen alert und beendest dann die check-Funktion vorzeitig mit return false - sodass das Popup nicht geöffnet wird.

    Du musst auch notieren:

    onsubmit="return check();"

    Dieses erneute »return« ist wichtig, damit der Rückgabewert von check() als Rückgabewert des ganzen submit-Event-Handlers wirkt.

    (Steht auch so im Beispielcode, den ich im anderen Posting verlinkt habe. Nur zur Erläuterung.)

    Falls ja wie kriege ich es hin das ich DANN per Action mein Popup geöffnet kriege.

    Wenn alle Eingaben richtig sind, dann öffnest du das Popup. Wie gesagt erst einmal mit einem leeren Dokument wie about:blank.

    Dann ist einfach das Ende der check-Funktion. Du kannst noch return true zurückgeben, das ist aber nicht nötig.

    Wenn also JavaScript den submit-Event auf diese Weise behandelt hat, startet der Browser die ganz normale Formularverarbeitung. Er schickt die Formulardaten mit einer POST-Anfrage an die Adresse, die du im action-Attribut angegeben hast.

    Das zusätzliche target-Attribut sorgt dafür, dass der Browser die Serverantwort im Fenster mit diesem Namen zeigt - und das ist eben das zuvor geöffnete Popup-Fenster.

    Oder gibt es eine Möglichkeit mit HTML/Submit ein Popup aufzurufen dessen Größe und Inhalt ich bestimmen kann ?

    Nicht direkt - deshalb nimmt man den beschriebenen Umweg (erst ein leeres Fenster mit einem bestimmten Namen öffnen, dann per target die Antwort ins Fenster leiten).

    Mathias

    1. dank dir so langsam steige ich durch ;)

      hab noch ein paar kleine Schönheitskorrekturen aber das wird schon.

      zum beispiel öffnet sich das ALERT Fenster 2mal ...
        if (al == 0) {alert("Bitte geben sie in die Felder gültige Werte ein");return false;}

      evtl. liegts hier dran ...

      mfg

      KRIS