Autor Zpráva
Denny Ellis
Profil
Dobrý den,
spravuji stránku http://www.detipatridomu.cz . Dlouhou dobu nikomu nevadilo, že když rozbalí jeden odkaz v menu a posléze druhý, zůstane první otevřený. Nyní však potřebuji tento nešvar odstranit. Mohli byste mi, prosím, poradit, jak na to??
Nox
Profil
Když někdo klikne na položku menu, nejdřív všechny zavři a pak otevři ten klikaný (to jak to máš teď)
Denny Ellis
Profil
Nox:
Ale to neřeší můj problém.. :-D Já potřebuju, aby když někdo klikne na jinej, než měl, ten původní se musí zavřít..
habendorf
Profil
Však to je přesně to, co Nox říká, ne?
Denny Ellis
Profil
Nj, ale musí ten uživatel kliknout ještě na to starý.. Já chci, aby se to starý zavřelo samo ve chvíli, kdy se otevře nový..

Podle mě se to musí nastavovat někde v .js souboru.. Is that correct??

function checkParent(src, dest) {
    while (src!=null) {
        if (src.tagName == dest) return src;
        src = src.parentNode;
        }
    return null;
}

function Menu(e) {
    var event = e || window.event;
    var open = event.target || event.srcElement;
    var el = checkParent(open, "LI");

this.oneSmOnly = true;

    if (null!=el) {
        var pos = 0;
        for (var pos=0; pos<el.childNodes.length; pos++) {
            if ("UL"==el.childNodes[pos].tagName) break;
            }
        if (pos==el.childNodes.length) return;
        }
    else return;

    el = el.childNodes[pos];
    if ("UL"==el.tagName) {
        if (""==el.style.display) {
            el.style.display = "block";
            }
        else {
            el.style.display = "";
            }
        }
    event.cancelBubble = true;
}

document.documentElement.onclick = Menu;

Moderátor Davex: Vkládej prosím kódy mezi značky [pre] a [/pre] (stačí kliknout na ).
PostCC
Profil
Denny Ellis:
Ne, nečtete přesně. Je tam doslovně uvedeno "nejdřív všechny zavři a pak otevři ten klikaný". Tzn. postup po kliknutí na položku menu bude:

1) cyklem projít všechny položky menu a sbalit je
2) rozbalit vybranou položku

Není nutné, aby uživatel klikal na starou položku, kterou chce uzavřít.
Denny Ellis
Profil
PostCC:
Omlouvám se, ale já nerozumím..
Pokud projdu všechny položky a sbalím je, jsou všechny sbaleny.. To je jasné, mylím.. A pak rozbalím tu, kterou chci, to je taky jasné. Ale v tuto chvíli si prohlížím například "hostitelská péče" a chci si rozbalit "pobyty pro děti". Kliknu na pobyty a hostitelská péče se nezavře.. zůstane otevřená..
Doufám, že nemluvím z cesty..:-D
PostCC
Profil
Denny Ellis:
Správně. Čili ve chvíli, kdy kliknete na "Pobyty pro děti", jako první akce se provede projití všech položek a jejich sbalení. Následně se teprve rozbalí "Pobyty pro děti". Prostě to kliknutí sestává se dvou kroků - 1) zabalit všechny položky, 2) rozbalit vybranou položku. Jasné?
habendorf
Profil
Denny Ellis:
Kliknu na pobyty a hostitelská péče se nezavře.. zůstane otevřená..

No a právě proto ji musíš sbalit.

Máš zhruba dvě možnosti:
1) sbalit cyklem všechno - to bude jednodušší, ale je to trochu mrhání
2) pamatovat si poslední otevřenou a sbalit jen ji

Co je na tom pořád k nepochopení?
Denny Ellis
Profil
Jo tak, vy nemluvíte o manuálním zavírání, ale o příkazu.. :-D V tom případě to dává smysl..:)

A prakticky to lze provést jak??
Denny Ellis
Profil
Dá se to nastavit v souboru .js, je to tak?? Kde mám co vepsat?? Stáhl jsem vzor z netu a bohužel nevím, co z toho mění tento aspekt, resp. příkaz, který toto udělá.. Můžete prosím poradit konkrétně?? Text z .js je výše..

díky
PostCC
Profil
Denny Ellis:
To asi nebude jen jednoduchá změna nějakého atributu scriptu. Napište si funkci, která v cyklu projde všechny položky menu a sbalí je, tu volejte před rozbalením rozkliknuté položky. Samozřejmě záleží na formátu menu, zřejmě využijete např. metody "getElementsByTagName" nebo kolekce "childNodes".
Denny Ellis
Profil
Já tomu rozumím, co je potřeba udělat, ale neorientuji se v tom.. Hledal jsem podle toho, co jste psal na webu, ale já JavaScript neovládám. Já jsem pouze stáhl jakousi šablonu na toto menu a nevím, co kam mám vepsat, aby to plně fungovalo..
Němohl byste mi prosím konkrétně říci co a kam mám vepsat??
Děkuji.
PostCC
Profil
Denny Ellis:
V tom případě nechávám prostor ostatním, snad se nějaká dobrá duše najde. Já na to, bohužel, nemám čas.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0