Autor | Zpráva | ||
---|---|---|---|
dj-bobr Profil * |
#1 · Zasláno: 27. 7. 2009, 10:44:32
Ahoj,
prosím o pomoc s problémem týkajícím se skrývání položek OPTION v selectu formuláře. Mám select "znacka", který obsahuje značky aut, a v závislosti na vybrané značce se mají zobrazovat v následujícím selectu "typ" pouze auta typů příslušné vybrané značky. Formulář: <form action="?" method="get"> ... <select name="znacka" onchange="typNapln(this.value);"> <option value=""></option> <option value="bmw">BMW</option> <option value="dodge">Dodge</option> <option value="ford">Ford</option> ... <select id="typ" name="typ" disabled="disabled"> <option id="empty" value=""></option> <option id="323" value="323">323</option> <option id="x3" value="x3">X3</option> <option id="caliber" value="caliber">Caliber</option> <option id="accord" value="accord">Accord</option> <option id="civic" value="civic">Civic</option> <option id="element" value="element">Element</option> ... a skript, který se načítá v HEADu externě - script-selectfilter.js : function typNapln(typ) { visible=''; document.getElementById('typ').disabled=false; document.getElementById('typ').value=''; if(typ!='bmw') { document.getElementById('323').style.display='none'; document.getElementById('x3').style.display='none'; } else { document.getElementById('323').style.display=visible; document.getElementById('x3').style.display=visible; } if(typ!='dodge') { document.getElementById('caliber').style.display='none'; } else { document.getElementById('caliber').style.display=visible; } "Živá" ukázka formuláře je k dispozici na http://pjimpexcz.recenze.net/?section=vyhledavani . Problém spočívá v tom, že ve Firefoxu vše krásně funguje, avšak v jiných prohlížečích (IE, Opera, Chrome) ne. Varianta přes modifikaci optionů skrz innerHTML také neprošla, naráží na IE bug. Dočetl jsem se, že option nelze jen tak jednoduše stylovat (proč se tedy FF nechá? :)), a obvyklé řešení vedlo buďto přes metodu remove(), nebo server-side. Metodu remove() použít nechci, jelikož nepotřebuji jen odebírat (skrývat) položky, ale také odkrývat při přepnutí na jinou značku v selectu. Server-side řešení bych se zde také raději vyhnul, i když trochu tuším, že se mu asi nevyhnu. Existuje ještě nějaká varianta, než se pustím do přepracovávání na verzi se server-side řešením? Děkuji předem za jakýkoliv tip. |
||
Chamurappi Profil |
#2 · Zasláno: 27. 7. 2009, 10:59:13
Reaguji na dj-bobra:
„Metodu remove() použít nechci, jelikož nepotřebuji jen odebírat (skrývat) položky, ale také odkrývat při přepnutí na jinou značku v selectu.“ V tom nevidím žádný problém. Odebraný <option> můžeš později zase vrátit. |
||
dj-bobr Profil * |
#3 · Zasláno: 27. 7. 2009, 11:15:10
Díky, taky fakt, to mě nějak ani nenapadlo :)
Zatím zkouším ještě rozchodit AJAXové řešení, dělám to poprvé, jde to trochu ztuha, ale věřím, že se to povede. |
||
Chamurappi Profil |
#4 · Zasláno: 27. 7. 2009, 11:19:05
Reaguji na dj-bobra:
„Zatím zkouším ještě rozchodit AJAXové řešení“ Proč? Při něm musíš dělat vesměs totéž, co bys dělal bez něj, a navíc ještě řešit AJAX. AJAX se hodí na situace, kdy máš hodně možností a potřebuješ je dynamicky dotahovat — což není tvůj případ. |
||
dj-bobr Profil * |
#5 · Zasláno: 27. 7. 2009, 11:25:44
No, AJAX mi umožní jednou dynamicky plnit ty optiony podle možností v databázi, proto jsem to aspoň zkusil implementovat takhle ... ale IE prostě vzdoruje pokusům o změnu optionů přes innerHTML. Fakt je ten, že už to aspoň funguje v Chrome a v Opeře, ale ten IE mi pije krev...
|
||
Chamurappi Profil |
#6 · Zasláno: 27. 7. 2009, 12:05:50
Reaguji na dj-bobra:
„AJAX mi umožní jednou dynamicky plnit ty optiony podle možností v databázi“ Pokud se ty možnosti nemění extrémně často a pokud je jich málo, nemá smysl je dotahovat dynamicky. „IE prostě vzdoruje pokusům o změnu optionů přes innerHTML“ Musíš buď nahradit celý <select> (což má své nevýhody), nebo přidávat <option>y metodami na <select>u. Tak či onak jsi tam, kde jsi začal a možnosti máš stejné, to „AJAXové řešení“ problém nevyřešilo. |
||
dj-bobr Profil * |
#7 · Zasláno: 27. 7. 2009, 12:42:45
Problém vyřešen pomocí přidávání a odebírání optionů metodami na selectu. Asi to fakt jinak rozumně nejde...
AJAXové dotahávání asi nechám, zpětně mi ještě dochází, že ten, kdo bude databázi plnit, by asi nezvládl aktualizovat ještě skript, tak bude lepší, když se hodnoty budou generovat rovnou z databáze. Díky za rady. |
||
Chamurappi Profil |
#8 · Zasláno: 27. 7. 2009, 12:50:18
Reaguji na dj-bobra:
„AJAXové dotahávání asi nechám […] bude lepší, když se hodnoty budou generovat rovnou z databáze“ Jaký je rozdíl mezi tím, když ty <option>y předgeneruješ přímo do HTML, a tím, když je generuješ v jiném skriptu, který se volá dodatečně? |
||
dj-bobr Profil * |
#9 · Zasláno: 28. 7. 2009, 09:54:05
Vlastně prakticky žádný, když tak o tom přemýšlím... teoreticky, kdyby návštěvník načetl stránku někdy kdysi dávno a teprve později začal vybírat, tak bude mít vždy aktuální optiony, ale to je v tomhle případě asi zanedbatelné..
|
||
Časová prodleva: 15 let
|
0