ugrás a tartalomhoz

selectek tartalmának újragenerálása javascriptből

csozo · 2011. Okt. 23. (V), 22.44
Sziasztok!

A problémám a következő:

Javascripttel generálom egy oldalon lévő selectek tartalmát. Egy change() esemény hatására meghívódik a függvény, ami ezt elvégzi. A tartalom az elvárt módon változik meg, viszont ezt követően már csak az imént módosított selected tudom változtatni, semelyik másik select esemány változásakor nem következik be a change() esemény.
Valószínűleg nem is azzal van a gond, hanem magával a függvényemmel, valahol közben szállhat el a script, de nem tudom hogy tudnám kideríteni, hogy pontosan hol.

A select change eseményem:
  1. $('select').change(function ()  
  2.         {   
  3.             //egyéb kód...  
  4.             refill_selects(where);  
  5.             //egyéb kód...  
  6.         });  
a refill_selectsben beállítom a megfelelő feltételeket és meghívom a függvényt, ami ténylegesen feltölti a selecteket:
  1. function refill_selects(where)  
  2.     {   
  3.         if (var i=0; i < search_types.length; i++)  
  4.         {  
  5.             //egyéb kód...  
  6.             create_and_fill_selects(i, search_types<span style="font-style:italic">, indexes);  
  7.             //egyéb kód...  
  8.         }  
  9.         else  
  10.         {  
  11.             for (var i=0; i < search_types.length; i++)  
  12.             {  
  13.                 create_and_fill_selects(i, search_types[i], false);  
  14.             }  
  15.         }</span>  
az else ágban lévő rész hívódik meg az oldal betöltődésekor ( [i]$(document).ready() ) is szóval az a rész tuti jól működik, mert első alkalommal még mindenből tudok választani, és a .change() bekövetkezik, szóval az if ággal lesz a gond, vagyis, hogy pontosabban fogalmazzak, az onnan meghívott create_and_fill_selects függvényemmel, aminek a gyanúsított része így fest:
  1. if (indexes != false)  
  2. {  
  3.     for (var i=0; i < garage.length; i++)  
  4.     {  
  5.         for (var j=0; j < indexes.length; j++)  
  6.         {  
  7.             if (i == indexes[j])  
  8.             {  
  9.                 options[j] = new Array(search_values[garage[i][id]], garage[i][id]);  
  10.             }  
  11.         }  
  12.     }  
  13. }  
Leginkább arra lennék kíváncsi, hogy másnak volt-e hasonló tapasztalata és ha igen, akkor hogy sikerült megoldani, vagy milyen praktikákat tudna rá.
A kódrészletek amiket kihagytam lényegében mind tömbműveletek, innen-onnan szedek ki értékeket, vizsgálok meg stb. lényegében egy szűrő a dolog az option-ök beállítására. De azt nem értem, ha tényleg minden értéket helyesen megkapok, akkor mégis hol halhat be a dolog...
Ha esetleg bárki tudna valamilyen támpontot adni, esetleg komoly segítséget megköszönném.
 
1

Hogyan?

Poetro · 2011. Okt. 24. (H), 01.22
Hogyan töltöd fel a select dobozok elemeit? Mert ha az egész select elemet lecseréled, akkor újra hozzá kell adni az eseménykezelőket. Egyébként pedig figyeld a böngésződ hiba konzolját.
2

cserélem az egész selectet

csozo · 2011. Okt. 24. (H), 08.48
Igen, lényegében minden select esetén az egész selectet cserélem.
  1. $('#' + type).html('<select name="' + type + '" class="' + div_class + '" id="garage_select_' + id + '"><option value="whatever">Mindegy</option>' + sorted_options + '</select>');  
A sorted_options tartalma pedig a következő:
  1. sorted_options = sorted_options + '<option value="' + unique_options[i][1] + '">' + unique_options[i][0] + '</option>';  
Ez összesen 17 selectet érint.
Hogy tudnám az eseménykezelőt újra hozzárendelni a selectekhez?
3

Ha csak a <select>-hez

Hidvégi Gábor · 2011. Okt. 24. (H), 09.19
Ha csak a <select>-hez tartozó options tömböt cseréled le, akkor nem kell újra hozzárendelni az eseménykezelőt.