Autor Zpráva
CZghost
Profil
Neví někdo, jak mám odkázat z jednoho elementu na nadřazený? Mám odkaz, který po kliknutí vyvolá funkci měnící odrážku nadřazeného elementu položky seznamu (jedná se blokové víceúrovňové menu).

Kódy nyní vypadají následovně:
<ul class="altmenu">
    <li><a href="#stranka1" onclick="location.href=location.hostname+location.path+'stranka1.html'; return false;">Položka 1</a></li>
    <li class="altmenu-nextitem-collapsed"><a href="#podmenu" onclick="toggle('podmenu'); return false;">Položka 2</a>
        <ul class="altmenu-submenu" id="podmenu" style="display: none;">
            <li><a href="#stranka2" onclick="location.href=location.hostname+location.path+'stranka2.html'; return false;">Položka 2.1</a></li>
            <li><a href="#stranka3" onclick="location.href=location.hostname+location.path+'stranka3.html'; return false;">Položka 2.2</a></li>
        </ul>
    </li>
</ul>
↑ html

<script type="text/javascript">
function toggle(objectId) {
    var object = document.getElementById(objectId);
    if (object.style=='display: none;')
        object.style='display: block;';
    else
        object.style='display: none;';
    /* -------------- ↑ Toggle menu view | Toggle icon ↓ -------------- */
    if (this.parent.className=='altmenu-nextitem-collapsed')
        this.parent.className='altmenu-nextitem-expanded';
    else
        this.parent.className='altmenu-nextitem-collapsed';
    };
</script>
↑ javascript

Potřeboval bych zjistit, jak se jmenuje objekt nadřazeného prvku, jestli existuje, a pokud ne, jak ho nasimulovat? this.parent jsem tam dal pouze na výplň, nevěřím, že nějaké "parent" existuje. V příručce JS od Yuhů se o objektu nadřazeného prvku vůbec nepíše...
Jan Tvrdík
Profil
Zkus object.parentNode.className.
CZghost
Profil
Zdá se, že teď nefunguje ani jedno. Proměnnou jsem odstranil, odkazuju přímo přes parametr, přidal jsem další parametr do funkce (id nadřazeného prvku). parentNode jsem vymazal, odkazuju prostřednictvím druhého parametru.

V Chromu se mi nechce měnit ani jedna funkce, jiné prohlížeče jsem ještě netestoval.

Kód javascriptu vypadá následovně:
function toggle(objectId,parentId) {
    if (document.getElementById(objectId).style=='display: none;')
        document.getElementById(objectId).style='display: block;';
    if (document.getElementById(objectId).style=='display: block;')
        document.getElementById(objectId).style='display: none;';
    /* -------------- ↑ Toggle menu view | Toggle icon ↓ -------------- */
    if (document.getElementById(parentId).className=='altmenu-nextitem-collapsed')
        document.getElementById(parentId).className='altmenu-nextitem-expanded';
    if (document.getElementById(parentId).className=='altmenu-nextitem-expanded')
        document.getElementById(parentId).className='altmenu-nextitem-collapsed';
};

Pro jistotu uvádím odkaz na živou ukázku (samotný kód zde).
Ani v Opeře to nejde. Kde se stala chyba?

EDIT: Zdá se, že samotný příkaz funguje úplně jinak, než jsem očekával. V Chromu, který jako jediný nabízí vývojářské nástroje jsem zjistil, že přiřazovací příkaz, krerý aplikuju na submenu pouze vypíše novou hodnotu do konzole. Kód nehází žádnou chybu, ale submenu se prostě ne a ne objevit. Existuje nějaká alternativa, která by mohla fungovat?
Jan Tvrdík
Profil
CZghost:
Jo vidíš, toho jsem si ani nevšiml =) object.style='display: block;' je blbost, správně je to object.style.display = 'block'
Chamurappi
Profil
Reaguji na CZghosta:
if (object.style=='display: none;')
Co to je za nesmysl? Ve style je objekt, ne řetězec.

V Chromu, který jako jediný nabízí vývojářské nástroje
Vývojářské nástroje jsou dnes už ve všech prohlížečích.
CZghost
Profil
Jan Tvrdík:
Děkuju, jsem to ale blbec =D

Chamurappi:
Vývojářské nástroje jsou dnes už ve všech prohlížečích.
V Opeře nejsou, nebo nevím, jak je vyvolat. Mám nejnovější verzi (automaticky aktualizovanou, na Win XP)

Co to je za nesmysl? Ve style je objekt, ne řetězec.
To už vlastně napsal kolega Jan Tvrdík výše.

Ten style jsem opravil, ale stále to nefunguje, ani tehdy, když odstraním return false.
Radek9
Profil
CZghost:
V Opeře nejsou
Jsou. Minimálně jsou vypsané v menu, stačí trochu hledat. Klávesová zkratka je Ctrl+Shift+I.
CZghost
Profil
Radek9:
Děkuju, už jsem je objevil =)

Jenže na problému s funkčností to moc nevylepšilo...
CZghost
Profil
Upravil jsem kód pro mobilní menu následovně:
function toggle(objectId,parentId) {
    document.getElementById(objectId).style.display=document.getElementById(objectId).style.display=='none'?'block':'none';
    /* -------------- ↑ Toggle menu view | Toggle icon ↓ -------------- */
    document.getElementById(parentId).className=document.getElementById(parentId).className=='mobilemenu-nextitem-collapsed'?'mobilemenu-nextitem-expanded':'mobilemenu-nextitem-collapsed'
};
Už to šlape :)

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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