Form Elemente zählen und weitergeben
Christoph
- javascript
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
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
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
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
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
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
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