Autor Zpráva
dj-bobr
Profil *
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
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 *
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
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 *
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
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 *
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
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 *
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é..

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: