Autor Zpráva
Návštěvník
Profil *
Na IE8 mi přestalo fungovat uživatelské menu (menu#menu)
http://paste.ofcode.org/EaG7qSn8PnE2CvFJCJjqjx

Asi jsem odstranil nějaké třídy které tam snad dříve byly.

Můžete poradit jak to zas rozjet?

Ukázkový kód (nefunkční)
http://jsfiddle.net/4ttwY/

Podle JS to vypadá že někam musím umístit třídu msieFix (ale v originálním kódu jsem ji nenašel použitou. Co jsem ale zjistil je že když do menu#menu -> ul -> li umístím attribut class=msieFix tak se menu rozbalí (bez najetí myši; testoval jsem to v html-kitu a hned po kliknutí na Preview, vidím rozbalené submenu).
pharaon.jh
Profil
a zkoušel jsi dát v javascriptu malý písmeno jak máš všade toto (Menu) a v html kodu máš malý m
Návštěvník
Profil *
pharaon.jh:
Zkoušel jsem to teďka v tom html kitu (nahradil jsem všechny výskyty Menu za menu) a nic to neudělalo.

Já nerozumím tomu JS, kdyby mi někdo řekl co to má dělat, tak na to snad příjdu


Při načtení stránky se spouští funkce DD.
DD nastaví var LI na #menu->ul->li
/** v JS není ul, je tam:  **/
document.getElementById('menu').getElementsByTagName("li")
To je OK? Nebo přidat ul mezi ty dva?

LI[k].onmouseover=swap;    
LI[k].onmouseout=swapBack;}    

Má volat swap když najíždím na menu.
K čemu je toto to nevím:
if(!LI[k].id){    LI[k].firstChild.onfocus=reveal;

Funkce swap přepíná třídu v prvku var LI.

Zjistil jsem že ta třída je funční pokud ji tam dám ručně. Tzn => nefunguje toto:

document.getElementById('menu').getElementsByTagName("li")

Jinak by to muselo jet


hm, jenže


var LI = document.getElementById('menu').getElementsByTagName("li");
console.log(LI);


Ve firebugu vypisuje:
[li.msieFix, li, li, li, li, li, li, li, li, li, li, li, li, li, li, li, li, li, li.logout] 



Ještě jsem odhalil:

/* Když rozbalím menu a najedu na submenu a pravým tlačítkem kliknu, proběhne focus a spustí se tato funkce: */
function reveal(){
console.log("log on");  
console.log(this); // odkaz a umístěný pod #menu -> ul -> li -> ul -> li
console.log(this.parentNode); // položka seznamu #menu -> ul -> li -> ul -> li
console.log(this.parentNode.parentNode); // submenu  #menu -> ul -> li -> ul 
console.log(this.parentNode.parentNode.parentNode); // položka menu #menu -> ul -> li
this.parentNode.parentNode.parentNode.className="msieFix"; /** => položce menu li nastavuje třídu msieFix**/
                 }

Reveal je tedy druhotná třída, spouští se až poté co má být submenu rozbaleno.


1. Před rozbalením submenu se menu#li nastavují handlers funkcí swap a swapback.
2. Když najedu na tento prvek, tak se nastaví ta třída msieFix a aplikuje se podle stylopisu
3. Když odjedu s myší z menu#li tak se tomu nastaví třída trigger. A tak má fungovat to přepínání.

Jenže tohle ladím ve firebugu, tak nevím co by to dělalo v IE8.
Návštěvník
Profil *
Učinil jsem nový objev. V ladícím nástroji IE8 je volba "Režim dokumentu:Adaptivní režim".

Zjistil jsem že menu v tomto režimu nefunguje, ale když to přepnu na "Internet Explorer 8" tak to funguje. Takže ten IE8fix co je v tom skriptu funguje jen takto. Ale co musím udělat, aby prohlížeč zpracovával stránku v tom režimu pro IE8 aby ten IE8fix fungoval?
Joker
Profil
Návštěvník:
Ale co musím udělat, aby prohlížeč zpracovával stránku v tom režimu pro IE8 aby ten IE8fix fungoval?
Dát na začátek stránky doctype: <!doctype html>.

Jinak ten kód teda „není žádná hitparáda“.
• Funkce swap, swapBack, toggle a reveal přepíší všechny CSS třídy na prvku.
• Funkce cleanUp nastaví zpracuje všechny <li> na celé stránce.
• Funkce DD nejdřív používá getElementById, pak kontroluje, jestli getElementById vůbec existuje (kdyby neexistovalo, kód skončí chybou už předtím), aniž by potom getElementById někde použila.
• Funkce jsou vesměs napsané jednoúčelově a spojené s aktuální strukturou kódu tak, že změna kódu znamená i přepsat skript.
Návštěvník
Profil *
Doctype mám
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

Hlavičku mám
<META HTTP-EQUIV="X-UA-Compatible" Content="IE=8">

Posílám celý kód:
http://paste.ofcode.org/3bZFfHFhCac63UKrhNFj75D

V IE8 funkční pouze když v ladících nástrojích přepnu na režim "Standardy aplikace Internet Explorer 8", jenže bez tohoto ručního nastavení mi ani hlavička nefunguje.

Jak to rozjet?

Joker:
Naštěstí by javascript měl fungovat a neměly by tam být chyby podle toho co jsem zkoušel ladil v nástrojích IE8. Struktura a id zůstaly zachovány, jen jsem to přesunul do tagu menu. A ostatně Firefox a Opera potvrzují že JS jede. Tak to musí být v tom zobrazovacím módu. Nevím jak se tyhle věci řeší na profesionální úrovni, ty bys to řešil jak? Jquery?
Joker
Profil
Návštěvník:
Doctype mám
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
To právě způsobí adaptivní režim.
Pro standardní režim: <!doctype html>
Návštěvník
Profil *
Joker:
Konečně! Díky.


Joker:
Nevíš náhodou jak stejné věci docílit na http://jsfiddle.net nebo na
http://kod.djpw.cz ? Nemohu přijít jak to tam zobrazit aby to bylo jako v IE8

Příklad - rozsekané uživatelské menu
http://kod.djpw.cz/vvbb

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: