Webform-Fieldset mit input-Elementen clonen - jQuery oder Ajax?

am 18.07.2014 - 11:09 Uhr in
Hallo,
Ich habe eine Webform (ein Reservierungsformular), wo der User in einer Selectbox auswählen kann, wieviele Leute er anmelden will (1 bis 20, default:1).
Dann gibt es ein Fieldset mit 3 Textfeldern für jeden Teilnehmer - Vorname, Name und eins für das Geburtsdatum (mit DatePicker).
Bei Änderung der Teilnehmerzahl ( jQuery('select').change ) wird dieses Fieldset per jQuery so oft wie nötig geclont, umbenannt und angehängt:
<fieldset id="webform-component-travelers2" ...>
<fieldset id="webform-component-travelers3" ...>
...
Das funktioniert, solange ich in dem Formular bleibe und die Anzahl ändere.
das Problem:
Diese Angaben zu den Personen sind Pflichtfelder, d.h. wenn ich das Formular abschicke, wird per Ajax eine Validation durchgeführt und ggf. das Formular neu aufgebaut.
Dann passiert folgendes:
Bei allen Fieldsets stehen in den Inputfeldern die Werte des jeweils letzten Eintrags,
das liegt daran, daß die ID- und name-Attribute der input-Elemente überall die gleichen sind - die des geclonten Fieldsets.
Wenn ich diese Attribute beim clonen auch umbenenne
<input id="edit-submitted-travelers2-fname" name="submitted[travelers2][fname]"> ...
<input id="edit-submitted-travelers3-fname" name="submitted[travelers3][fname]"> ...
...
meine Frage:
Offenbar müssen die nötigen Fieldsets über webform_options_form_alter() angelegt werden, damit sie von Dupal bzw. dem Webform-Modul ordentlich registriert werden -
Kann mir jemand erklären, wie das geht oder wo das genauer erläutert wird?
Wie kann ich denn aus jQuery('select').change heraus diese webform_options_form_alter() mit dem Parameter der Anzahl aufrufen und dann die nötige Anzahl der Fieldsets anhängen?
Vielen Dank im voraus für jeden Hinweis - mfG, Michael
- Anmelden oder Registrieren um Kommentare zu schreiben
vielleicht probierst du mal
am 18.07.2014 - 14:02 Uhr
vielleicht probierst du mal Webform Add More
Hi, zu Deiner Frage: Ja Du
am 19.07.2014 - 07:25 Uhr
Hi,
zu Deiner Frage:
Ja Du musst die Form auf der Serverseite modifizieren "webform_options_form_alter()".
So wie es aussieht modifizierst Du die Form nur Clientseitig "jQuery('select').change".
jQuery('select').change heraus diese webform_options_form_alter()
Forms werden normalerweise in Drupal registriert bevor Sie zum Client gesendet werden.
MfG
Robert
Ja, schön -
am 19.07.2014 - 13:12 Uhr
soweit war ich mit meinen Überlegungen auch schon gekommen.
Die Frage war: wie macht man das?
Wie kann ich clientseitig mit jQuery('select .teilnehmer-anzahl').change serverseitig die Modul-Funktion webform_options_form_alter() aufrufen (Ajax?), und damit dann die Webform-Elemente ergänzen?
@caw:
aus Webform Add More:
Important Note: This module does not dynamically create fieldsets. You must create the maximum number of fieldsets allowed by cloning the original fieldset. Then, the fieldsets are progressively displayed as the Add More button is clicked.
Dazu brauche ich kein extra Modul, das kann ich auch selber machen - eine maximale Anzahl von Fieldsets in der Webform anlegen, und die dann über jQuery('select .teilnehmer-anzahl').change nur anzeigen oder verbergen - das wollte ich aber vermeiden, weil es theoretisch ziemlich viele werden könnten ...
mfG, Michael
Hi, Du musst einen Ajax
am 19.07.2014 - 12:33 Uhr
Hi,
Du musst einen Ajax Callback für Deine Form verwenden.
Dieser Link sollte Dich auf den richtigen Weg bringen:
http://stackoverflow.com/questions/16808118/trying-to-add-group-of-field...
Unten hat er ein Beispiel Link.
MfG
Robert