Autor Zpráva
Pentla
Profil *
document.getElementById(id).getElementsByTagName('ul')[0].style.displa y = 'none';

toto me v IE normalne funguje a v Mozille to nejde... Firebug hlasi:
document.getElementById(id).getElementsByTagName("ul")[0] has no properties
nevite nekdo jak na to aby to chodilo i v mozille? Zkousel jsem taky:
document.getElementsByName(id)[0].getElementsByTagName('ul')[0].style. display = 'none';

bohuzel to same v IE jde v Mozille ne.

Diky vsem za radu.
Chamurappi
Profil
Reaguji na Pentlu:
Uvedená chybová hláška znamená, že Mozilla nenašla žádný <ul> uvnitř elementu s daným id. Problém je spíš někde v HTML kódu. Když máš ten Firebug, můžeš se podívat, jestli skutečně máš <ul> tam, kde ho očekáváš.
peta
Profil
Pentla
viz Chamurappi, odkaz na stranku by to vyresil.
Pravdepodobne znama chyba, spousteni scriptu jeste pred tim, nez existuje BODY tag a prislusne UL.
Ze to funguje v IE je spise nahoda. IE spousti JS obvykle, az nacte celou stranku.
Pentla
Profil *
Mate pravdu, tag <ul> se vyskytuje az za spusteni funkce... viz. kod. Ale vubec me nenapada jak to resit. :(
	

<li id="a1"><a href="javascript:switchid('a1');">Prospectus</a></li>
<ul style="display: none;">
<li><a href="02_11_communication-with-parents.html">Communication with Parents</a></li>
<li><a href="02_12_contact-location.html">Contact &amp; Location</a></li>
</ul>

a tady js:

function switchid(id){
if (document.getElementById(id).getElementsByTagName('ul')[0].style.displ ay == 'block') {
document.getElementById(id).getElementsByTagName('ul')[0].style.dis play = 'none';
//hideallids();
} else {
document.getElementById(id).getElementsByTagName('ul')[0].style.dis play = 'block';
//hideids(id);
}
}

hned v podmince me to rekne, ze ul has no properties, jak jsem uvedl vyse.
Diky moc za rady
Chamurappi
Profil
Reaguji na Pentlu:
Tvůj skript hledá první <ul> v elementu <li id="a1">. Koukám, koukám a uvnitř toho <li> žádný <ul> nevidím. Ty ano? Já ho vidím až za <li>.
Posuň ukončovací značku </li> až za konec </ul>.

Mimochodem, nešlo by z „Prospectus“ udělat nějaký smysluplný odkaz? JavaScriptovou funkci můžeš volat z onclick a atribut href potěší ty, kdo nemají zapnutý JS.


Reaguji na petu:
spousteni scriptu jeste pred tim, nez existuje BODY tag a prislusne UL
Chybová hláška by vypadala jinak. Tahle říká, že metoda getElementById uspěla, ale getElementsByTagName už ne.

IE spousti JS obvykle, az nacte celou stranku
Nesmysl. Jestli si ho teď nezvládneš obhájit, budu jeho příští opakování mazat.
Pentla
Profil *
Diky moc za radu. Naprosto hloupoucka chybicka:). S volani funkce na onclick ti musim dat taky za pravdu. Mnohem lepsi. Toto html chodi naprosto bez problemu:

<li id="a1"><a href="#" onclick="switchid('a1');">Prospectus</a>
<ul style="display: none;">
<li><a href="02_11_communication-with-parents.html">Communication with Parents</a></li>
<li><a href="02_12_contact-location.html">Contact &amp; Location</a></li>
</ul>
</li>
Petroff
Profil
Je to OK - ale aby ti to fungovalo, musíš tam všude mít identifikátory id='ai' a přitom by to šlo bez nich a kód byl kratší.

>> Objekt odkazu se předá ovladači (e = hodnota this) a jeho rodič ( = e.parentNode ) je položka seznamu,
>> ze které se získá vnořený seznam a zpracuje použitím tern.operátoru ? (místo if)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html><head><title>LIST</title></head>
<body>
<ul id="list">
<li><a href="01_01_home.html">Home</a></li>
<li><a href="02_00_prospectus.html" onclick="return switchE(this);">Prospectus</a>
<ul style="display: none;">
<li><a href="02_01_communication-with-parents.html">Communication with Parents</a></li>
<li><a href="02_02_contact-location.html">Contact &amp; Location</a></li>
</ul>
</li>
<li><a href="03_00_newsletters.html" onclick="return switchE(this);">Newsletters</a>
<ul style="display: none;">
<li><a href="03_01_january.html">January</a></li>
<li><a href="03_02_february.html">February</a></li>
<li><a href="03_03_march.html">March</a></li>
<li><a href="03_04_april.html">April</a></li>
<li> . . . . . . . . . . . . . . . . .</li>
</ul>
</li>
</ul>
<script>
function switchE(e){
e = e.parentNode.getElementsByTagName('ul')[0].style;
e.display = (e.display == 'block') ? 'none' : 'block'; return false;
}
</script>
</body>
</html>
ještě kratší by to bylo, kdyby se vynechaly i atributy onclick onclick="return switchE(this);"
....výhodnost závisí na tom, kolik položek/úrovní vnoření máš

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

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

0