Använda sin egen funktion i en annan funktion [Javascript]

Permalänk
Medlem

Använda sin egen funktion i en annan funktion [Javascript]

Hej! Har nyss börjat lära mig lite om Javascript. För att lära mig lite om cookies så tänkte jag prova att använda mig av dem för att ändra olika stilar(CSS) på hemsidan.

Jag hade då tänkt att använda en funktion som startar innan sidan laddas och den funktion läser av cookien och ställer in vilken sidstil som skall användas. Jag har redan på test gjort en funktion så att man kan ha en knapp på hemsidan som ändrar värdet på cookien samt en annan knapp på hemsidan som kollar värdet på cookien. Detta fungerar jättebra, problemet är när jag inuti en funktion vill använda mig av en annan funktion.

Jag vill skapa en fjärde funktion, som kollar cookiens värde och sedan sätter en viss variabel till detta värde men det fungerar inte. Jag fattar inte hur formatet på indata skall se ut. Inuti själva html-koden har jag en knapp med egenskapen: onClick="showCookie(style)". Denna knapp tar upp en ruta där det står vilket värde cookien har, vilket fungerar. Men om jag istället vill använda mig av funktionen "showCookie" inuti en annan funktion så går det inte. Jag har provat: showCookie(style), showCookie("style"), showCookie('style') men oavsett vilket så får jag tillbaks värdet null.

Är det någon som har någon aning om vad jag gör för fel?

/Emil

function createCookie(name,value) { document.cookie = name + "=" + value; window.location.reload(); } function readCookie(name) { var find = name + "="; var arr = document.cookie.split(';'); for (var i=0; i<arr.length; i++) { var current = arr[i]; while (current.charAt(0)==' ') { current = current.substring(1,current.length); if (current.indexOf(find)==0) { return current.substring(find.length,current.length); } return null; } } } function showCookie(name) { var txt = readCookie(name); alert("Cookien har värdet " + txt); }

Permalänk
Medlem

Ok, jag förstår att det var rätt svårt att förstå min fråga. Jag omformulerar den:

Jag har sammanlagt tre funktioner:

readCookie(name) --> Läser av värdet av en cookie, inparameter: name
showCookie(name) --> Använder readCookie(name) och skapar sedan en popup som visar värdet av cookien, inparameter: name
showStyleCookie() --> Använder readCookie(name) för att läsa av värdet av en specifik cookie, nämligen den med namnet style, ingen inparameter.

Koden för dessa tre ser ni nedan:

<script type="text/javascript"> function readCookie(name) { var find = name + "="; var arr = document.cookie.split(';'); for (var i=0; i<arr.length; i++) { var current = arr[i]; while (current.charAt(0)==' ') { current = current.substring(1,current.length); if (current.indexOf(find)==0) { return current.substring(find.length,current.length); } return null; } } } function showCookie(name) { var txt = readCookie(name); alert("Cookien har värdet " + txt); } function showStyleCookie() { showCookie(style); } </script>

Om jag nu vill använda mig av de två olika alternativen i min html-kod så fungerar bara det ena. HTML-koden för att skapa två olika knappar ser ut som följer:

<input type="button" onClick="showCookie(style)" value="Visa cookie" /> <input type="button" onClick="showStyleCookie()" value="Visa style cookie" />

Av dessa knappar fungerar bara den översta, den andra gör ingenting. Jag förstår inte vad det är för skillnad på att skicka med värdet style i funktionen showCookie beroende på om jag använder mig av den inom <script>-taggarna eller ej?

(Har även provat att skicka med värdet "style" samt 'style' i funktionen showStyleCookie men det resulterar bara i att variabeln txt får värdet null).

Någon som förstår mitt problem?

Permalänk
Medlem

Din readCookie ser ju lite skum ut.. Ex. om en cookie inte börjar med ett blanksteg (ex. första cookien i document.cookie) så hoppar du bara över den...

Kan dock inte reproducera ditt problem (iom. att style inte är definerad någonstans och därmed inte kan användas som en variabel).

Skrev dock om din readCookie, och det fungerar utmärkt med showCookie("style") för mig, så du kan ju testa om detta löser ditt problem.

function readCookie(name) { var matches = document.cookie.match(name+"=([^;$]+)"); if(matches!=null) { return matches[1]; } return null; }

Visa signatur

The difference between stupidity and genius - the latter has limits

Permalänk
Medlem

Du ska använda citationstecken runt textsträngar i javascript. Vilket som fungerar, men jag brukar använda enkla citationstecken eftersom de går att använda i HTML-attribut (t ex <input type="button" onclick="showCookie('style')" value="Visa cookie" />)

Ändra din readCookie() till

function readCookie(name) { var data = document.cookie.split('; '); var val = null; for (i=0; i < data.length; i++) { var tmp = data[i].split('='); if (tmp[0] === name) { val = tmp[1]; } } return val; }

och testa igen.

Visa signatur

Kom-pa-TI-bilitet