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ó:
Fórum:
trigger
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.
Lehet értetlennek tünök.
Köszönöm a válaszodat. Ha jól gondolom, a jqueryt akkor az első form change eseménye indítja?
szerintem erre való a form
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.
---
Tatár Balázs János
Ez a rész jól működik.
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.
egy darab wrapperben kezelném
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.
---
Tatár Balázs János
Igen.
Igen ez a megoldás. :)) Köszönöm a segítséget.
3 szintű select - Sajnos korai volt az öröm.
É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.
Megoldódott, bár nem igazán tudom a probléma okát.
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.