Avatar billede EfterOtte Juniormester
27. september 2017 - 19:37 Der er 6 kommentarer

Hjemmeside menu, kollapser ikke rigtigt.

Jeg er i gang med en side, jeg har bygget på en template.

Problemet er at min menu ikke fungere rigtigt, "burger-knappen" kommer frem når den skal. Men den gør ikke noget når jeg trykker på den, og de andre knapper forsvinder ikke.

Jeg har stillet spørgsmålet på stackoverflow uden held, måske en af jer kan hjælpe.

https://stackoverflow.com/questions/46433387/header-made-from-template-doesnt-collapse-properly
Avatar billede Slater Ekspert
27. september 2017 - 20:00 #1
Du har defineret "myFunction" inde i jQuery's onready, så den er ikke tilgængelig i det scope du bruger den. Flyt den udenfor.
Avatar billede a3-seo.dk Ekspert
28. september 2017 - 09:50 #2
Ville godt kigge på det, men dine sider http://provan.dk/index.html er simpelthen så langsomme, at jeg sprang fra ;-)
Avatar billede EfterOtte Juniormester
28. september 2017 - 15:15 #3
Tak for svar Slater.

Jeg er godt nok ikke helt med, mener du nede på linje 79:
<li><a href="java script:void(0);" class="icon" onclick="myFunction()">&#9776;</a></li>

Skal den rykkes et andet sted, eller er det noget helt andet?
Avatar billede Slater Ekspert
28. september 2017 - 15:29 #4
Nej, der kalder du funktionen myFunction, og det er der sådan set ikke noget galt med - andet end at den funktion ikke eksisterer, når du forsøger at kalde den.

I din main.js har du funktionsdeklarationen:
function myFunction() {
    var x = document.getElementById("myTopnav");
    if (x.className === "topnav") {
        x.className += " responsive";
    } else {
        x.className = "topnav";
    }
}

- Men denne ligger inde i funktionen jQuery(document).ready(function() { } );

Når noget deklareres inde i en funktion, så eksisterer det kun så længe denne funktion er aktiv og i gang med at blive udført. Det er det der hedder scope. Dvs. funktionen myFunction eksisterer kun et splitsekund, når siden loades - derefter forsvinder den igen.

Som hovedregel skal du erklære funktioner i det yderste scope, dvs. ikke inde i nogle funktioner eller andre ting. Der kan være grunde til at gøre det andet, men i så fald bør du vide hvorfor du gør det.
Avatar billede EfterOtte Juniormester
29. september 2017 - 11:15 #5
Så problemet er at den kalder på funktionen på linje 246, som er inde i main.js, også eksistere den kun i det tidsrum den gør det?

Hvordan får jeg den så til at "kalde" på den hele tiden?

Hvordan ændre jeg det så at den så kalder på den function inde main.js hele tiden?
Avatar billede Slater Ekspert
29. september 2017 - 12:26 #6
Det skal ikke kaldes hele tiden, men kun når der bliver trykket på knappen - og det sker også fint nu. Men eftersom du ikke ved hvornår brugeren trykker på knappen, skal funktionen være tilgængelig til at blive kaldt hele tiden. Og det gør du som sagt bare ved at flytte den ud i yderste scope.

F.eks.

function a() {
    function b() {
        // do something
    }
}

Her ligger funktion "b" inde i funktion "a". Så mens funktion "a" findes hele tiden, vil funktion "b" være tilgængelig fra funktion "a", altså kun imens "a" udføres.

Hvad du ønsker er i stedet:

function a() {
    // do something
}

function b() {
    // do something else
}

- Her ligger begge funktioner i yderste scope, og er tilgængelige overalt. Det er det du skal have gjort med myFunction. Flyt den ud, så den ikke ligger inde i en anden funktion.
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

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