Autor Zpráva
Celoush
Profil *
Mám v html select box, kterému chci nejlépe na onfocus dynamicky aktualizovat obsah. Pokud odeberu, či změním nějakou hodnotu je vše v pořádku. Problém ale nastane, když přidám novou možnost (přes new Option). V tom případě ale dojde k zavření nabídky.
Vypadá to pak tak, že po kliknutí se nabídka rozbalí, nepříjemně prohlížeč problikne a zase se nabídka zabalí. Pak už sice vše funguje v pohodě, nabídka se rozbaluje a zabaluje jak má (samozřejmě do dalšího aktivování onfocus).

Napadlo mě několik možností, jak tento stav vyřešit, ale nevím, který z nich mám zvolit a jak ho vyřešit.

1.) po naplnění a úpravě nabídky selectu zavolat jeho dynamické rozbalení (nevím zda na to existuje nějaká metoda, nedaří se mi ji najít).
2.) nějak jinak upravit obsah, aby nedocházelo k zavírání.
3.) Volat jinou vhodnější událost (onclick nepřichází v úvahu, pak to bliká furt).
zivan
Profil
Obsah select boxu je na necem zavisly? Udelal bych upravu toho select boxu pri zmene toho zavisleho prvku (udalost onchange).
Celoush
Profil *
Právěže změny nejsou závislé na žádném prvku stránky.
Pro ilustraci příklad, kdy by v selectu byl seznam článků a počet komentářů. A když se změní počet komentářů nebo se nějaký nový článek přidá, tak ho chci aktualizovat.

Je tu tedy možnost kontrolovat, zda se data změnila a pak teprve případně obnovit obsah selectu, čímž odpadne ta nepříjemná vlastnost zasunutí při každé aktivaci, ale úplně to neřeší můj problém, protože stále k tomu bude docházet (i když v menší míře).
zivan
Profil
Asi presne nechapu. Pokud obsah selectu neni zavisly na nejakem objektu na strance, tak podle ceho ho menis? Javascript se snad jinam nedostane.
Mas nekde priklad?
Celoush
Profil *
Příklad fce, kterou volám na onfocus

function aktualizuj_select() {
var xmlhttp = (window.XMLHttpRequest ? new XMLHttpRequest : (window.ActiveXObject ? new ActiveXObject('Microsoft.XMLHTTP') : false));
if (!xmlhttp) {
return false;
}
xmlhttp.open('GET','xml_aktualni_data.php');
xmlhttp.onreadystatechange = function() {
obsluha(xmlhttp);
};
xmlhttp.send('');
return true;
}

Prostě mi xml_aktualni_data.php vrátí XMLko, které si ve funkci "obsluha" zpracuji

function obsluha(xmlhttp) {
if (xmlhttp.readyState == 4) {
vyber=document.getElementById('id-selectu');
var moznosti = xmlhttp.responseXML.getElementsByTagName('moznost');
for (x=vyber.length;x>=0;x--) {vyber.remove(x);} /* vymazu obsah nabidky */
for (var i=0; i < moznosti.length; i++) { /* naplnim aktualnimi daty z XML */
jmeno=moznosti[i].firstChild.data;
typ=moznosti[i].getAttribute('typ');
id=moznosti[i].getAttribute('id');
var opt = new Option();
opt.value=id;
opt.text=jmeno;
opt.className=trida_pro_select_box(typ); /* js fce vraci nazev tridy pro dany typ */
vyber.options[vyber.length] = opt; /* -- tohle zpusobi, ze se select zase zavre */
}
}
}
peta
Profil *
Celoush
http://www.volny.cz/peter.mlich/www.htm#msub7
nekde na strance, snad pod timto nadpisem mam nekde odkaz na stranku, ktera pracuje se selectem. Nikdy jsem nepotreboval menit obsah javascriptem. Pravdepodobne bych prvek obalil dived, divu nastavil visibility hidden, naplnil select a pak zobrazil. Viz casove udalosti, tusim hra HAD shora moje ukazky js ...
Ale fakt nevim, nepotreboval jsem to a nevim, jak se ti to chova.

ActiveXObject
toto ti v 50% prohlizecu nepojede, nevim, ze se tim zabyvas...
Celoush
Profil *
Ano ActiveXObject je pro IE, protože nezná XMLHttpRequest (což zase znají většinou ostatní prohlížeče).
Toto téma je uzamčeno. Odpověď nelze zaslat.

0