Autor Zpráva
Anonymní
Profil *
Dobrý den,

mám jednoduchý seznam

<select name="vyhledavani-cena" id="vyhledavani-cena">
<option value="0">nerozhoduje</option>
<option id='cena_1000' value="1000">1000</option>
<option id='cena_2000' value="2000">2000</option>
<option id='cena_3000' value="3000">3000</option>
</select>

A mam dva buttony:

<input type='button' onclick='odstranOptiony()' value='Odstran optiony' />
<input type='button' onclick='vratOptiony()' value='Vrat optiony' />

Když uživatel klikne na první butony, tak nabítka select nebude obsahovat žádné inputy (pole inputů bude prázdné)

A když klikne na "Vratit optiony", tak se zase všechny inputy zobrazí.

Duležité ale je, aby se pracovalo s optiony, nikoli selectem.

Tento skript pak bude sloužit pro parametrické vyhledávání v Ajaxu. Máte několik seznamů nabídek. Uživatel si vybere z jednoho seznamu nějakou hodnotu a podle této hodnoty se změní hodnoty v druhém selectu (resp. nezmění, jen by nepotřebné hodnoty měly zmizet).

Př.: máte cestovní kancelář, která nabízí zájezdy. Vy si vyberete Termín: září a v selectu "Ceny" zmízí (nebo se zašednou) ceny, které pro zájezdy v září neexistují.

Víte, jak na to?

IE nepodporuje display:none, visible:hidden ani atribut disabled u inputů.

Díky moc.
peta
Profil *
ja prepisuji treba cely select, ale lze i to...

o = objGet2(f,"xxx");
objDel(o);
if (y>0)
{
o1=creEL(f,'SELECT');
o1.name = "selplayer";
o1.className = "select";
j = o1.length;
for (i=0;i<y;i++)
{
x = xThis.mapa1["players"][i];
o1[j] = new Option(x[1]+" ("+x[2]+"x"+x[3]+")",i);
j++;
}
appEL(o,o1);
}

http://www.volny.cz/peter.mlich/www.htm#mssub11
# ** www.mattkruse.com JS priklady (select, calendar, tree)
venca12
Profil
Obdobný problém jsem nedávno také řešil a vyřešil jsem ho následovně:

Potřeboval jsem, při vybrání něčeho v prvním selectu zobrazit určitý počet optionů v jiném selectu. Seznam všech možných optionů jsem si uložil do dvourozměrného pole, kde první klíč je nějaké nepodstatné číslo položky a druhý rozlišuje value záznamu v prvním selectu a hodnotu optionu v druhém. Názroně:
var optiony = new Array(

['1', 'krava'],
['1', 'ryba'],
['2', 'kachna']
);

V kódu dva selecty:
<select id="prvni"><option value="1">jedna</option><option value="2">dva</option></select>

<select id="druhy"></select>

Teď stačí píchnout na select1 událost onchange, aby se duhý po změně prvního naplnil nějakými optiony:
document.getElementById('prvni').onchange=function() {

for(i=0;i<this.length;i++)
{
with(document.getElementById('druhy'))
{
//vymazu vsechny optiony z druheho
while(length)
{
options[0] = null;
}

// naplnim ho novymi
for(j=0;j<optiony.length;j++)
{
if(optiony[j][0]==this.options[i].value) options[length] = new Option(optiony[j][1], optiony[j][1]);
}

}
}

StruČně: Pomocí document.getElementById() dostaneš select do proměnné. Vlastnost .length ti u objektu typu select vrátí počet optionů, které v něm jsou aktuálně uloženy/zobrazeny. Pomocí vlastnosti .options se můžeš dostat k jednotlivým optionům, je to pole, takže optiony indexuješ pomocí id, např .options[1], .options[2] atp., vlastnost optionu získáš, přes další vlastnost .value, tzn.: .options[2].value.

Pokud budeš chtít přidat do selectu další option, musíš ho vytvořit, jako objekt nakonec pole .options, tzn. použiješ něco jako toto: select.options[select.length] = new Option(text, value); Parametry v konstruktoru Option jsou první text v optionu a druhý value, možná je to obráceně, nevím.

Pokud budeš chtít option ze selectu vymazat, stačí, když mu přiřadíš null, tzn.: select.options[1] = null; Pozor na to, že po vymazaném optionu vznikne díra, do které se posunou další optiony, proto nejde použít k mazání následující kód:
for(i=0;i<select.length;i++)

{
select.options[i] = null;
}
Protože by v každé iteraci vzrostl index i a díky výmazu zároveň klesla délka pole length, tudíž by se myslím vymazala jenom polovina optionů. Lepší je použít následující:
while(select.length)

{
select.options[0] = null;
}
Alespoň já jsem to použil a zatím to funguje bezvadně. Na další možnosti použití a řešení přijdeš určitě sám, když už pracuješ s tím Ajaxem. Btw. říkej tomu raději xmlhttp, děkuju.
Toto téma je uzamčeno. Odpověď nelze zaslat.

0