Feld im aufrufenden Formular updaten

  • Habe 2 Formulare Form1 "Auftrag"und Form2 "Produkt-Suche".


    Form2 wird von Form1 aufgerufen.


    In Form2 wird über Usereingaben und Logik ein geeignetes Produkt ermittelt. (Das funktioniert alles.)

    Dieses Produkt würde ich gerne in Form1 in das dafür bestimmte Feld einstellen.

    (Wie) kann ich das erreichen?


    Ich vermute ich muß beim Aufruf von Form2 die Objektreferenz von Form1 "merken" (wie mache ich das?)


    Danke für Info.

  • Wenn du das zweite Formular aus dem ersten per JavaScript aufrufst, kannst du per window.parent auf das Fenster-Objekt des ersten Formulars zugreifen und dann dieses manipulieren. Hab das schon mal für was anderes so gemacht, habe den Code gerade aber nicht da.

  • So richtig blicke ich das auch nicht. Du könntest ja mal vollständige Code-Beispiele bringen und Screenshots, wenn es schon mit der Seite nicht geht.


    Gespeichert werden die Daten im jeweiligen Formular, Stichwort Document Object Model, dort kannst du sie auch auslesen und ändern. Dazu identifizierst du einen gültigen Selektor und greifst mit nativem Javascript oder jQuery darauf zu. Da ist alles möglich, aber man müsste schon verstehen, wo das Problem liegt.

  • Ich habe doch in der ersten Nachricht in diesem Thread erklärt was ich möchte.

    Weiß nicht wie ich es besser erklären soll.


    Ich möchte eine in Form2 ermittelte Artikelnummer in Form1 in das Feld Artikelnummer schreiben.

    Beide Forms sind geöffnet.


    Woher bekomme ich eine Referenz auf Form1 und das betreffende Feld?

  • Referenzen musst du mit IDs und Klassen selbst im HTML erzeugen oder, falls mit anderem und nicht von dir erzeugt, analysieren, um einen Selektor zu bilden. Am einfachsten nimmst du die ID des Formulars und suchst darunter das Feld. Anders gesagt, wie der Selektor für die jeweilige Referenz auszusehen hat, hängt also von der jeweiligen HMTL-Struktur ab. Darum kann ich dir das auch nicht genauer sagen.


    Gängige Javascript-Methoden dafür sind getElementById und querySelector, bei Text-Feldern greifst du lesend oder schreibend auf .value zu.

  • Hallo Addi,

    danke, werde mal mit den Begriffen auf die Suche gehen um die korrekte Syntax zu haben.


    Meine Idee wäre:

    - im aufrufenden Formular, die Referenz zu ermitteln und in einer "$_SESSION" Variablen zu hinterlegen.

    - dann im aufgerufenen Formular die Variable zu lesen und dann den Wert damit zu schreiben.


    Bin gespannt …

    Gruß Harro

  • Hab noch eine Frage, weiß nicht ob ich dafür einen neuen Thread aufmachen soll.


    Ich habe aus einem Formular ein anderes Formular aufgerufen.

    Nun würde ich gerne zurückspringen.

    Dazu habe ich folgendes gefunden und ausprobiert:

    Code
    <script type="text/javascript">
      $previous = "javascript:history.back()";
    </script>
    
    <a href="<?= $previous ?>">Back</a>

    Jetzt wird das aufrufende Formular erneut geöffnet, allerdings mit den zuvor manuell eingegeben Daten.

    Das hätte ich nicht erwartet.

    Mache ich was falsch?

  • Das zweite ist ein Popup.

    Paßt da auch das window.parent?

    Ja, genau dafür ist das da. Also zumindest, wenn du das Popup per JavaScript (window.open oder iframe-Modals über Bootstrap in Joomla) öffnest. Dann ist window.parent eine Referenz auf das aufrufende Fenster. Das kannst du dann gewissermaßen als Präfix nutzen für alle JavaScript-Befehle. Beispielsweise ist der Aufruf window.parent.document.getElementById('meineId') im Popup äquivalent zu document.getElementById('meineId') im aufrufenden Fenster.

    Jetzt wird das aufrufende Formular erneut geöffnet, allerdings mit den zuvor manuell eingegeben Daten.

    Das hätte ich nicht erwartet.

    history.back entspricht einem Klick auf den "zurück"-Button des Browsers und sollte daher mit Vorsicht benutzt werden, da du nie weißt, wo der Nutzer vorher war. Es ist in den allermeisten Fällen besser, das Ziel explizit festzulegen, also die URL der Seite, die du aufrufen willst.

    Du vermischst in deinem Code auch PHP und JavaScript. Guck dir bitte genau an, was du da machst.


    Ganz allgemein und ohne dir zu nahe treten zu wollen: Bist du dir sicher, dass es keine Formularkomponente gibt, mit der du das abbilden kannst, was du haben möchtest? Ohne fundierte PHP- und JavaScript-Kenntnisse eine eigene Joomla-Komponente zu schreiben, noch dazu augenscheinlich für eine Seite, die damit Geld verdienen und sensible und wichtige Daten wie Bestellungen verwalten möchte, ist gewagt. Bei Problemen helfen wir selbstverständlich gerne weiter, aber deine Fragen und die Antworten, die wir darauf liefern können, sind sehr kleinschrittig. Ich würde dir empfehlen, dich erst mal mit Einsteigertutorials in die beiden Sprachen einzuarbeiten, dann geht hinterher die Entwicklung schneller.

  • Hallo Harmageddon,

    nett gesagt "sind sehr kleinschrittig", in der Tat. ;)


    Ich habe das Projekt "geerbt" und vor mehr als einem Jahr kleinere Dinge angepaßt, hauptsächlich Logik, Layout und lesen/schreiben über ODBC einer GUPTA-Datenbank.

    Aber nur in bestehenden Schirmen und Abläufen.


    Nun will/soll/muß ich simple Transportaufträge erfassen (Immer nur ein Produkt von A nach B)


    Habe dafür 3 Formulare gebastelt. ( 2 + 3 habe ich gemacht, weil die Dinge komplexer sind. )

    1. Auftrag

    2. Produkt ermitteln über Dialog und ODBC-Abfragen, das funktioniert.

    3. Adresse ermitteln über Dialog und ODBC-Abfragen, das funktioniert.


    Mein erstes Problem war, daß ich die Variablen vom Auftrag nicht in die Schirme 2 + 3 bekam.

    Das ist nun gelöst über die $_SESSION-Variablen.


    Jetzt bin ich am "Rückweg".

    Wie bekomme ich die mit Form 2 + 3 ermittelten Daten direkt in den Auftrag geschrieben?

    Da hoffe ich nun auf "window.parent". Werde gleich mal damit loslegen.


    Ich mache Systementwicklung seit vielen Jahren mit den sich wandelnden Tools.

    Nun bin ich hier angekommen. :)

    Meine Erfahrung nutzt mir auch hier, bringt mich nur manchmal auf falsche Fährten, weil Erwartungen nicht getroffen werden.

    Aber da werde ich ja von euch nett eingenordet.


    Dummerweise kann ich keinen LINK anbieten, da der Rechner "von außen" nicht erreichbar ist.


    Bisher wurde mir schon gut geholfen, aber es sind halt kleine Schritte.


    Würde auch bezahlten Support in Anspruch nehmen, wenn ich wüßte woher.

    Gruß Harro

  • Was mache ich hier falsch?

    Möchte einem Feld eine Variable zuweisen. Es passiert nichts, es bleibt der alte Wert im Feld. Keine Fehlermeldung.

    Einen Text zuweisen geht!


    PHP
    <?php
    $lcTestFeld1 = "nachher Var";
    ?>
    <a><input type="text" name="TestFeld1" id = "feldid1" value="vorher1" style="width:100px;" class="inputbox" /></a>
    <a><input type="text" name="TestFeld2" id = "feldid2" value="vorher2" style="width:100px;" class="inputbox" /></a>
    
    <script type="text/javascript">
      document.getElementById('feldid1').value = "nachher direkt";
      document.getElementById('feldid2').value = $lcTestFeld1;
    </script
  • JavaScript kennt keine php-Variablen, aber so müsste es gehen:


    PHP
    <script type="text/javascript">
      document.getElementById('feldid1').value = "nachher direkt";
      document.getElementById('feldid2').value = <?php echo "$lcTestFeld1" ?>;
    </script>
  • Du vermischst immer noch PHP und Javascript, wie ich oben schon geschrieben habe. Im oberen Teil setzt du eine Variable in PHP, unten versuchst du, sie in Javascript direkt abzurufen. Das geht nicht, da das zwei unterschiedliche Programmiersprachen sind, die von sich aus keine Variablen teilen. Du kannst die PHP-Variable mit echo in den Javascript-Code schreiben. Vergiss aber die öffnenden und schließenden PHP-Tags nicht!


    Edit: kdh war schneller.

  • Danke, jetzt funktioniert es.

    Ist das denn ein sinnvoller Weg eine Variable in einem Formular zu bestücken?

    Kann ich das nicht mit PHP direkt erreichen?

    PHP
    <?php
        $lcTestFeld1 = "nachher Neu";
    ?>
    <a><input type="text" name="TestFeld1" id = "feldid1" value="vorher1" style="width:200px;" class="inputbox" /></a>
    <a><input type="text" name="TestFeld2" id = "feldid2" value="vorher2" style="width:200px;" class="inputbox" /></a>
    
    <script type="text/javascript">
        document.getElementById('feldid1').value = "nachher";
        document.getElementById('feldid2').value = "<?php echo $lcTestFeld1?>";
    </script>