Avatar billede barzog Nybegynder
31. maj 2005 - 22:41 Der er 2 kommentarer

show/hide virker ikke i Firefox

Hejsa, jeg sidder her med en menu som funker fint i IE, men jeg kan ikke få skidtet til at virke i Firefox.

Det der sker er at menuen ikke "hider" til at starte med, så alle undermenuerne er synlige.

Dette er koden til det:

    function GetChildElem(eSrc,sTagName)
    {
        var cKids = eSrc.children;
        for (var i=0;i<cKids.length;i++)
        {
            if (sTagName == cKids[i].tagName) return cKids[i];
        }
        return false;
    }
     
    function expandCollapse(processStep){
        /* hide all SPAN's */
//        HideAll('SPAN');                       
//        ExpandNode(document.getElementById(processStep).parentElement);
        if (eChild = GetChildElem(document.getElementById(processStep),"SPAN")){
            document.getElementById(processStep).parentElement.className = (document.getElementById(processStep).parentElement.className.indexOf("Highlight") > 0) ? document.getElementById(processStep).className.replace("Highlight","") : document.getElementById(processStep).className + "Highlight";
            eChild.style.display = ("inline" == eChild.style.display ? "none" : "inline");
            eChild.style.visibility = ("visible" == eChild.style.visibility ? "hidden" : "visible");
            var childrenOfCurrentItem = document.getElementById(processStep).children;
            for (var i=0; i < childrenOfCurrentItem.length; i++) {
                if (childrenOfCurrentItem[i].tagName.toUpperCase() == 'TABLE') {
                    var childrenOfTable = childrenOfCurrentItem[i].children;
                    for (var j=0; j < childrenOfTable.length; j++){
                        if (childrenOfTable[j].tagName.toUpperCase() == 'TBODY') {
                            var childrenOfTbody = childrenOfTable[j].children;
                            for (var k=0; k < childrenOfTbody.length; k++){
                                if (childrenOfTbody[k].tagName.toUpperCase() == 'TR') {
                                    var childrenOfTR = childrenOfTbody[k].children;
                                    for (var l=0; l < childrenOfTR.length; l++){
                                        if (childrenOfTR[l].tagName.toUpperCase() == 'TD') {
                                            if (childrenOfTR[l].id == 'rightarrow') {
                                                childrenOfTR[l].innerHTML = ("visible" == eChild.style.visibility ? "<img src='images/menu/menu_down.gif' border='0'/>" : "<img src='images/menu/menu_right.gif' border='0'/>");
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }

    function Highlight(processStep)
    {
//        alert(document.getElementById(processStep).className);
        document.getElementById(processStep).className = (document.getElementById(processStep).className.indexOf("Highlight") > 0) ? document.getElementById(processStep).className.replace("Highlight","") : document.getElementById(processStep).className + "Highlight";
//        alert(document.getElementById(processStep).className);
    }
    function ShowAll(sTagName)
    {
        var cElems = document.all.tags(sTagName);
        var iNumElems = cElems.length;
        for (var i=1;i<iNumElems;i++) {
            cElems[i].style.display = "inline";
            cElems[i].style.visibility = "visible";
        }
    }
     
    function HideAll(sTagName)
    {
      var cElems = document.all.tags(sTagName);
      var iNumElems = cElems.length;
        for (var i=0;i<iNumElems;i++) {
          if (cElems[i].className == 'clsHasKids') {
              cElems[i].style.display = "none";
              cElems[i].style.visibility = "hidden";
          }
      }
    }
 
    function HighlightProcessStep(processStep){
        /* hide all SPAN's */
        HideAll('SPAN');                       
       
        /* change the class of the current menu item*/
        if (document.getElementById(processStep)){   
            document.getElementById(processStep).className = 'menuCurrent';
            /* expand the parent items of the current menu item */
            ExpandNode(document.getElementById(processStep).parentElement);
            /* highlighting arrow */
            var childrenOfCurrentItem = document.getElementById(processStep).children;
            for (var i=0; i < childrenOfCurrentItem.length; i++) {
                if (childrenOfCurrentItem[i].tagName.toUpperCase() == 'TABLE') {
                    var childrenOfTable = childrenOfCurrentItem[i].children;
                    for (var j=0; j < childrenOfTable.length; j++){
                        if (childrenOfTable[j].tagName.toUpperCase() == 'TBODY') {
                            var childrenOfTbody = childrenOfTable[j].children;
                            for (var k=0; k < childrenOfTbody.length; k++){
                                if (childrenOfTbody[k].tagName.toUpperCase() == 'TR') {
                                    var childrenOfTR = childrenOfTbody[k].children;
                                    for (var l=0; l < childrenOfTR.length; l++){
                                        if (childrenOfTR[l].tagName.toUpperCase() == 'TD') {
                                            if (childrenOfTR[l].id == 'arrow') {
                                                childrenOfTR[l].innerHTML = "<img src='images/arrow_purple.gif' border='0'/>";
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }else if (childrenOfCurrentItem[i].tagName.toUpperCase() == 'SPAN') {
                    childrenOfCurrentItem[i].style.display = 'inline';
                    childrenOfCurrentItem[i].style.visibility = 'visible';
                }

            }
        }
    }
    function ExpandNode(node){
        /* stop the recursive function if UL tag with id='top' is found */
        if ((node.parentElement.tagName.toUpperCase() == 'UL') && (node.parentElement.id == 'top')){
            return;
        }
        else{
            /* keep going up a level */
            ExpandNode(node.parentElement);
            /* if parent node is 'SPAN' then, expand it */
            if (node.parentElement.tagName.toUpperCase() == 'SPAN') {
                node.parentElement.style.display = 'inline';
                node.parentElement.style.visibility = 'visible';
                /* Highlight its parent TD */
                node.parentElement.parentElement.className = node.parentElement.parentElement.className + 'Highlight';
                var childrenOfCurrentItem = node.parentElement.parentElement.children;
                for (var i=0; i < childrenOfCurrentItem.length; i++) {
                    if (childrenOfCurrentItem[i].tagName.toUpperCase() == 'TABLE') {
                        var childrenOfTable = childrenOfCurrentItem[i].children;
                        for (var j=0; j < childrenOfTable.length; j++){
                            if (childrenOfTable[j].tagName.toUpperCase() == 'TBODY') {
                                var childrenOfTbody = childrenOfTable[j].children;
                                for (var k=0; k < childrenOfTbody.length; k++){
                                    if (childrenOfTbody[k].tagName.toUpperCase() == 'TR') {
                                        var childrenOfTR = childrenOfTbody[k].children;
                                        for (var l=0; l < childrenOfTR.length; l++){
                                            if (childrenOfTR[l].tagName.toUpperCase() == 'TD') {
                                                if (childrenOfTR[l].id == 'rightarrow') {
                                                    childrenOfTR[l].innerHTML = "<img src='images/menu/menu_down.gif' border='0'/>";
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
Avatar billede barzog Nybegynder
31. maj 2005 - 22:50 #1
nærmere betegnet er det sandsynligvis linie 65:

      var cElems = document.all.tags(sTagName);

der ikke sætter en variabel i Firefox - kun i IE
Avatar billede olebole Juniormester
01. juni 2005 - 04:26 #2
<ole>

Det er stort set hele scriptet, den er gal med. Det indeholder masser af proprietære MS-ting.
Derudover er det generelt dårlig kode, der bl.a. gør brug af dynamiske klasse skift, hvilket er en absolut no-no  :)

Det virker også lidt underligt, scriptet indsætter tags med XHTML-lukninger - f.eks:
    <img src='images/menu/menu_down.gif' border='0'/>

- da scriptet slet ikke kan bruges under XHTML

/mvh
</bole>
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester