Christoph: Form Elemente zählen und weitergeben

Hallo,

ich habe eine Select-Auswahlbox mit DIV's und Javascript nachgebaut, quasi eine Art DHTML-Combobox.
Wenn man was in der Combobox ausgewählt hat, dann soll im rechten Frame daneben, eine php-Datei angesprochen werden, die dann Aufgrund von den übermittelten Daten was berechnet.

Das Javascript für die Berechnung ist im Prinzip recht einfach: Es zählt alle Elemente (versteckte Input-Felder und Checkboxen wenn sie angeklickt sind) in einem Formular und gibt den Value-Wert und den Name-Wert an die Datei im Frame mittels eines Links weiter. Soweit klappt alles. Der übermittelte Link sieht in etwa dann so aus:

preis.tpl.php?group=89&ln=de&artikel_id=996&artikel_name=testgerät&artikel_nummer=nb0996&artikel_preis_a=1749.00&artikel_preis_b=1459.00&artikel_preis_c=1449.00&ram_micro_ddr_1x256_max_1024=417&festplatte_40gb_jvc=616&maus_allgemein=427&office_software=432&mini_pci_54mbit=602&guard_pannenhilfe=712&

In der preis.tpl.php holt er sich dann die Daten aus der Datenban über GET raus und berechnet es dann. Soweit klappt immer noch alles, jedenfalls für die Checkboxen und die versteckten Input-Felder.

Wenn man jetzt aber was in der Combobox ausgewählt hat, dann soll er den Value-Wert austauschen und an die Datei im Frame weiterschicken. Die Javascript-Funktion "artikelchange" durchläuft wieder die Schleife und zählt alle Elemente in dem jeweiligen Formular und schickt den Link an den Frame usw.

Standardmäßig ist z.b. das Input-Feld mit name="ram_micro_ddr_1x256_max_1024" und value="417" belegt und wenn sich was in der Combobox ändert, sollte dann der Value-Wert z.B. "419" sein.

Nur ich weiß nicht wie ich das in der Funktion weitergeben soll. Natürlich zählt er im Moment nur alle hidden-Felder in einem Form und alle Checkboxen, aber ich hab momentan noch keinen Ansatzweg gefunden.

Hier mal die komplette HTML-Seite mit dem jeweiligen Javascript etc.
http://www.cgdesign.de/test/selectbox_div2.html

Danke für die Hilfe

  1. Hallo,

    Standardmäßig ist z.b. das Input-Feld mit name="ram_micro_ddr_1x256_max_1024" und value="417" belegt und wenn sich was in der Combobox ändert, sollte dann der Value-Wert z.B. "419" sein.

    Nur ich weiß nicht wie ich das in der Funktion weitergeben soll. Natürlich zählt er im Moment nur alle hidden-Felder in einem Form und alle Checkboxen, aber ich hab momentan noch keinen Ansatzweg gefunden.

    Ich verstehe auch nach zweimaligen Lesen dein Problem nicht. Was ist deine Frage, was funktioniert genau nicht? Was steht in welcher Funktion nicht zur Verfügung?

    Allgemein scheint mir dein Code ziemlich umständlich zu sein, insbesondere die völlige Vermischung von HTML, CSS und JavaScript im HTML-Code. Die Layouttabelle sowie Platzhalter wie <p style="margin: 0; padding: 0; line-height: 1px; font-size: 1px;"><br /><br /></p> solltest du mit CSS lösen. So ist der Code ziemlich unübersichtlich.

    Für die Serialisierung der Formulardaten für den Query-String solltest du escape() oder besser encodeURIComponent() verwenden. Letztere nimmt eine UTF-8-Kodierung vor.

    Mathias

    1. Hi

      Ich verstehe auch nach zweimaligen Lesen dein Problem nicht. Was ist deine Frage, was funktioniert genau nicht? Was steht in welcher Funktion nicht zur Verfügung?

      Hmmm, ich dachte ich hätte es ausführlich beschrieben :/
      Die Frage lautet: wie kann ich mit einer Funkion alle geänderten value-Werte in der Combobox übergeben?
      Ich habe zur Einfacherheit es mal in einer richtigen Select-Box dargestellt: http://www.cgdesign.de/test/selectbox_div3.html
      Im iframe wird die php-Datei geladen und mit der Funktion artikelchange werden die geänderten Daten an das iframe übergeben. Der Link der dann zusammengesetzt wird, sieht wie folgt aus:
      preis.tpl.php?group=89&ln=de&artikel_id=996&artikel_name=testeintrag&artikel_preis_a=1749.00&

      Wählst du jetzt was in einem Select-Feld aus, dann hängt er einfach den Name und den Value-Wert dran:
      zb: preis.tpl.php?group=89&ln=de&artikel_id=996&artikel_name=testeintrag&artikel_preis_a=1749.00&maus_allgemein=1339&port_replikator_jvc_941=427&

      Und genau die gleiche Funktion will ich auch für meine selbstgebastelte Combobox haben.

      Allgemein scheint mir dein Code ziemlich umständlich zu sein, insbesondere die völlige Vermischung von HTML, CSS und JavaScript im HTML-Code. Die Layouttabelle sowie Platzhalter wie <p style="margin: 0; padding: 0; line-height: 1px; font-size: 1px;"><br /><br /></p> solltest du mit CSS lösen. So ist der Code ziemlich unübersichtlich.

      Naja, den Platzhalter kann ich noch in CSS lösen, aber das andere mit dem Javascript dazwischen, hab ich nicht besser hinbekommen. Meine Javascript-Kenntnisse sind dafür zu gering.

      Grüße

      Christoph

      1. Hallo,

        Die Frage lautet: wie kann ich mit einer Funkion alle geänderten value-Werte in der Combobox übergeben? (...)

        Mir ist schon klar, was dein Ziel ist, und eigentlich hast du dafür schon eine funktionierende Grundlage geschaffen. Die Frage hast du im Prinzip bereits gelöst.

        Im Code habe ich nur einen offensichtlichen Fehler gefunden. Der führt dazu, dass das jeweilige versteckte Eingabefeld nicht geändert wird:

        var str='<div class="selectBoxAnOption"><a href="#" class="optionhover" onclick="artikelchange(' + lfn + '); document.getElementsByName(\'meinWert\'+' + id + ')[0].value = this.firstChild.nodeValue; return false; document.getElementsByName(' + artikelname + ')[0].value=' + dest + '; return false">' + linkname + ' <img src="img/' + status + '.gif" alt="" /></a></div>';

        Hier steht ein überflüssiges return false; vor der Anweisung, die den Wert des hidden-Feldes aktualisiert. Außerdem müsste es heißen:

        ' ... document.getElementsByName('' + artikelname + '')[0].value = '' + dest + ''; ... '

        Das führt dann zu
        document.getElementsByName('irgendeinname')[0].value = 'irgendeinwert';

        Davon abgesehen ist der Code anscheinend funktionstüchtig. Im Forumsarchiv wirst du übrigens einige Combobox- und Dropdown-Lösungen finden, die mit weniger Code auskommen und auch abwärtskompatibel sind. Vor allem vermeiden sie es, JavaScript dynamisch ins Dokument zu schreiben - Fehler wie der obige werden dadurch gleich umgangen.

        Mathias

        1. Hallo,

          danke für den Fehler, somit geht es zwar jetzt, aber komischerweise muss ich immer doppel klicken... Woran könnte denn das noch liegen?

          Ich hab das Archiv mit Combobox von 2006 - 2002 durchgesucht und alle Beiträge gelesen, aber keins passte in meine Lage hinein, da ich nämlich das Select-Feld mit seinen Option-Feldern nicht gebrauchen kann, ansonsten würde ich es wohl einfacher handhaben ;)

          Grüße

          Christoph

          1. Ich bin in der ruhigen Mittagspause selber drauf gekommen warum das so ist :D

            Hat sich erledigt, soweit geht alles, jetzt muss ich mal schaun, wie abwärtskompatibel das Aufklapp-Menü auch ist ;)

            Danke.

            Christoph

  2. Hi,

    Das Javascript für die Berechnung ist im Prinzip recht einfach: Es zählt alle Elemente (versteckte Input-Felder und Checkboxen wenn sie angeklickt sind) in einem Formular und gibt den Value-Wert und den Name-Wert an die Datei im Frame mittels eines Links weiter. Soweit klappt alles. Der übermittelte Link sieht in etwa dann so aus:

    preis.tpl.php?group=89&ln=de&artikel_id=996&artikel_name=testgerät&artikel_nummer=nb0996&artikel_preis_a=1749.00&artikel_preis_b=1459.00&artikel_preis_c=1449.00&ram_micro_ddr_1x256_max_1024=417&festplatte_40gb_jvc=616&maus_allgemein=427&office_software=432&mini_pci_54mbit=602&guard_pannenhilfe=712&

    Warum machst Du das so umständlich? Gib preis.tpl.php als action im Formular an und den Framename als target.

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    Schreinerei Waechter
    O o ostern ...
    Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.