Avatar billede solsken Nybegynder
27. april 2008 - 13:09 Der er 9 kommentarer og
1 løsning

Javascript menu i Windows 2000

Jeg er ikke sikker på om det er den rette kategori men jeg prøver.
Jeg har lavet en kombinert javascript/CSS menu der virker meget godt i Windows XP og Vista men ikke i Windows 2000. Selve javascriptet ligger for sig selv i en .js file og er linket til i <head> sektionen. Jeg har prøvet lægge scriptet direkt i html coden men det hjælper ikke. adressen er http://www.sv-konstnarsforb.se/pre1228/index.php hvis I vil se hvordan menuen ser ud.
Avatar billede w13 Novice
27. april 2008 - 14:05 #1
Hvordan virker den ikke?
Avatar billede solsken Nybegynder
27. april 2008 - 15:37 #2
Når man klikker på plus og minus knapperne ( bilder) sker der intet. Menuen udvider sig kun når man klikker direkte på namnet i menuen.
Avatar billede w13 Novice
27. april 2008 - 15:38 #3
Har du mulighed for at copy+paste javascriptkoden til menuen ind her.
For når jeg går ind for at se det, står det hele på én linje, og det bliver trættende at prøve at læse i længden. :)
Avatar billede solsken Nybegynder
27. april 2008 - 15:46 #4
function initMenus() {
    if (!document.getElementsByTagName) return;
   
    var aMenus = document.getElementsByTagName("LI");
    for (var i = 0; i < aMenus.length; i++) {
        var mclass = aMenus[i].className;
        if (mclass.indexOf("treenode") > -1) {
            var submenu = aMenus[i].childNodes;
            for (var j = 0; j < submenu.length; j++) {
                if (submenu[j].tagName == "A") {
                   
                    submenu[j].onclick = function() {
                        var node = this.nextSibling;
                                           
                        while (1) {
                            if (node != null) {
                                if (node.tagName == "UL") {
                                    var d = (node.style.display == "none")
                                    node.style.display = (d) ? "block" : "none";
                                    this.className = (d) ? "treeopen" : "treeclosed";
                                    return false;
                                }
                                node = node.nextSibling;
                            } else {
                                return false;
                            }
                        }
                        return false;
                    }
                   
                    submenu[j].className = (mclass.indexOf("open") > -1) ? "treeopen" : "treeclosed";
                }
               
                if (submenu[j].tagName == "UL")
                    submenu[j].style.display = (mclass.indexOf("open") > -1) ? "block" : "none";
            }
        }
    }
}

window.onload = initMenus;
Avatar billede w13 Novice
27. april 2008 - 16:17 #5
Jeg tror, problemet opstår ved "className" som nogle gange også skal angives med "class":
-------------------------------------------
function initMenus() {
    var aMenus = document.getElementsByTagName("li");
    for (var i = 0; i < aMenus.length; i++) {
        var mclass = null;
        mclass = aMenus[i].className ? aMenus[i].className : aMenus[i].class;
        if (mclass.indexOf("treenode") > -1) {
            var submenu = aMenus[i].childNodes;
            for (var j = 0; j < submenu.length; j++) {
                if (submenu[j].tagName == "A") {
                   
                    submenu[j].onclick = function() {
                        var node = this.nextSibling;
                                           
                        while (1) {
                            if (node != null) {
                                if (node.tagName == "UL") {
                                    var d = (node.style.display == "none")
                                    node.style.display = (d) ? "block" : "none";
                                    this.class = this.className = (d) ? "treeopen" : "treeclosed";
                                    return false;
                                }
                                node = node.nextSibling;
                            } else {
                                return false;
                            }
                        }
                        return false;
                    }
                   
                    submenu[j].class = submenu[j].className = (mclass.indexOf("open") > -1) ? "treeopen" : "treeclosed";
                }
               
                if (submenu[j].tagName == "UL")
                    submenu[j].style.display = (mclass.indexOf("open") > -1) ? "block" : "none";
            }
        }
    }
}

window.onload = initMenus;
Avatar billede solsken Nybegynder
27. april 2008 - 17:47 #6
Jeg ved intet om javascript, mener du man skall fjerne Name i className og kun have class, eller hvad?
Avatar billede w13 Novice
27. april 2008 - 18:09 #7
Nej, jeg sætter begge to i mit eksempel. Men du kan jo prøve at bruge min kode.
Avatar billede olebole Juniormester
29. april 2008 - 00:24 #8
<ole>

Når et CSS-klassenavn skal sættes, kan det gøres på to måder. Man kan enten bruge DOM'ens setAttribute metode. I så fald bør der bruges 'class' - men IE insisterer på 'className' - som er property'ens navn i IDL:
    ELEMENT.setAttribute("class", "klasseNavn"); // Standard syntaks

    ELEMENT.setAttribute("className", "klasseNavn"); // IE syntaks

Bruges 'class' i IE, sættes blot en ubrugelig attribut med det navn, som ikke har CSS-mæssig indflydelse på elementets rendering.

Det andet, man kan gøre, er at sætte klassenavnet som property på HTML-DOM objektet. I så fald skal man altid bruge 'className' - der som sagt er navnet i IDL:
    ELEMENT.className = "klasseNavn";

Det sidste giver ikke mening under XHTML. Da siden er skrevet i XHTML 1.0 Transitional - der i virkeligheden ikke er andet end HTML 3.2 og aldrig kan parses som XHTML - sker der dog ikke så meget ved at bruge den.

/mvh
</bole>
Avatar billede solsken Nybegynder
04. maj 2008 - 12:47 #9
Det hjalp ikke men jeg gir dig poæng alligevel da du i det mindste prøvede hjælpe.
Avatar billede olebole Juniormester
04. maj 2008 - 16:33 #10
Til en start har du en fejl her:

<ul class="treemenu">
  <a href="http://www.sv-konstnarsforb.se/pre1228/index.php">Home</a>

Et ul-element kan kun have li-elementer som børn, så a-elementet skal ind og ligge under et li-element, hvis koden skal være valid.

Dernæst skal du passe på med 'childNodes' og 'next-/previousSibling' ... en tekst node er jo også en childNode  ;o)

Test f.eks. denne kode:

<button onclick="alert(this.nextSibling.nodeName)">TEST</button>
<div>Blablabla</div>

Den returnerer '#text'! Knappens nextSibling er nemlig ikke divet - men tekst noden, som indeholder linjeskiftet efter knappen  =)
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