Ajax dependent form zsákutca

signatum képe

A segítségeteket kérem.

Szükségem van egy form-ra, amely (egyelőre)3 dependent select-ből áll(na). A formok az adatbázisból kérik le ajax segítségével az option-ok elemeit.
Alapvetően ezzel nincs is baj. Tökéletesen lefut a keresés, azonban ha az első selectet ismét változtatom, akkor a második select értékét még rendben felülírja az ajax (change esemény), azonban a harmadik select, ha megfeszülök sem változik, csak ha a másodikat is változtatom.Gondoltam hogy az első select callback-hoz is hozzárendelem a harmadikat, de ez nem megy, így egyelőre passz részemről.

további szép estét.

Drupal verzió: 
Sweetchuck képe

Ez úgy lenne szép, ha saját kódból kezelnéd az első lista változása utáni ajax kérést. Mert akkor egy kérés elég lenne a második és harmadik lista elemeinek lekérdezéséhez. (Ha van előre kiválasztott értéke a második listának.)

Egyébként próbáld meg azt, hogy amikor az első listát a felhasználó kézzel megváltoztatja, akkor elindul az ajax a másodikra, és amikor befejeződik akkor kierőszakolsz egy onChange eseményt a $('.myselect-2').trigger('change'); varázsigével.

0
0
signatum képe

Köszönöm a válaszodat. Ha jól gondolom, a jqueryt akkor az első form change eseménye indítja?

0
0
tatarbj képe

szerintem erre való a form api-nak az #ajax attribútuma :) ott meg tudod adni mi legyen a callback függvény, amiben az adott wrapper elemeit újra tudod tölteni. mindehhez nem kell js varázslásokat csinálni, hanem egyszerűen megírod a függvényt, aminek paramétere a $form_state változó, abban ott van minden, ami a formból jön adat. Ez alapján már le tudod válogatni, hogy milyen option alapján mivel akarod feltölteni a második (hasonló úton a harmadik) selectet.
Üdv, tatarbj.

0
0

---
Tatár Balázs János

signatum képe

A feltöltés tökéletes(természetesen az ajax attributummal). A gondom az, ha mind a három option értéke megvan, és ismét változtatom az elsőt, akkor a második még rendben nullázódik( '#empty_option' => '- Válassz -',) azonban a harmadik select optionja megtartja az addig feltöltött értékeit.

0
0
tatarbj képe

egy darab wrapperben kezelném az egészet és akkor az első select, ha megváltozik, akkor az arra kötött callbackben mindig ki tudod nullázni a 3. selectet.
tehát:
1. selectnél a callback függvényben kicseréled a full wrappert (amiben benne van a 2. és 3. selected), utána a második selectnél is kicseréled a teljes - ugyanazon! - wrappert, csak beletolod a másodikban levő értékeket is, amit továbbra is tudsz venni onnan, ahonnan az első jött ($form_state)
gy dologra kell vigyázni: textfieldek tartalmát hajlamos az #ajax "elfelejteni", szóval azt nem biztos, hogy ugyanebben a wrapperben érdemes tárolni. volt már, hogy szívtam ezzel eleget, aztán csak ki kellett szervezni a formnál a wrapperből majd mindent :)
üdv, tatarbj.

0
0

---
Tatár Balázs János

signatum képe

Igen ez a megoldás. :)) Köszönöm a segítséget.

0
0
signatum képe

Érdekes módon csak az első select minden második változtatására nullázza le a 3. select értékét.Esetleg nincs v.kinek egy müködő kódja, mert vélhetően én szurtam el vmit, de saját kútfőből képtelen vagyok rájönni mit!
A wrapper közös, látszik hogy az első select cserénél újratölti a 2-3 selectet, azonban a 3. select értékei nem nullázódnak, csak ha mégegyszer újratöltöm az első selectet.

0
0
signatum képe

Ki kellett venni a közös wrappert, és most külön jqueryvel kell nullára állítani az optionokat. Azonban továbbra sem értem, miért is nem lehetett ezt az eredeti elképzelés szerint megoldani.

0
0