Autor Zpráva
Paja
Profil
Zdravím,
postupoval jsem podle návodu Yuhůa, který je
ZDE. Docela mě štve, že člověk většinou potřebuje v rozevíracím menu, aby prvky byly ze začátku rozevřené, nikoliv zavřené (především kvůli lidem, kteří mají JS vypnutý). Lidé se zapnutým JS si potom lehce menu zavřou kliknutím.
Problém je, že na obsah, který je zobrazený lze uplatnit Yuhůův návod, jenže se musí kliknout dvakrát. Poprvé to tomu odstavci hodí do stylu "display: block" a podruhé teprve "display:none", protože ten skript nedokáže najít výchozí hodnotu atributu "display". Pak by bylo lehké pomocí JS udělat opačný atribut.
Nevíte někdo, jakým "lehkým" způsobem zjisti výchozí hodnotu atributu "display", když si nahrabu element pomocí funkce getElementById() ?
los
Profil *
Nestačí niečo takéto?
function zobrazSkryj(idecko) {

var el = document.getElementById(idecko).style;
el.display = (el.display == ""? "none": "");
}
los
Profil *
Ešte by som to zmenil na lepšie
function zobrazSkryj(idecko) {

var el = document.getElementById(idecko);
el.style.display = (el.style.display == ""? "none": "");
}
Paja
Profil
jasné, taky mě to mohlo napadnout.. sem myslel, že výchozí hodnota atributu display je "block" a ona je prázdná... díky moc, vyzkouším to
Paja
Profil
Takže nic,
protože toto:
el.style.display = (el.style.display == ""? "none": "");

neví, výchozí hodnotu.. el.style.display == "" => nepozná, pro js je to zatím "nedefinované"
los
Profil *
Aha, tak potom nejako takto:
el.style.display = (el.style.display? "none": "");
alebo
el.style.display = (el.style.display != "none"? "none": "");
los
Profil *
To prvé malo byť:
el.style.display = (!el.style.display? "none": "");
Dero
Profil
Ten element musí samozřejmě v DOM existovat, proto pokud se pokoušíš takovou funkci navázat při načítání stránky, musíš počkat, až bude DOM připraven. Nesnáze počkáš na vyvolání události window.onload, ale pokud stránka obsahuje mnoho obrázků či jiného datové náročného obsahu, je lepší detekovat přímo vytvoření DOM.

Na to má Mozilla a Opera 9 událost DomContentLoaded, pro starší prohlížeče a IE je třeba jiných triků (například hrátky s readyState atp.). Bohužel - IE7 se chová v tomto směru docela nepředvídatelně a je docela tryzna u něj odhadnout, kdy je DOM k dispozici.

Zatím nejlépe se osvědčil tento skript: http://ajaxian.com/archives/domcontentloadednext a skripty z něj odvozené. Stačí Googlit.
Toto téma je uzamčeno. Odpověď nelze zaslat.

0