2017-01-03 21 views
0

Ich habe eine Reihe von Top-Nachrichten, die als Warnungen dienen. Sie haben eine X, um sie zu schließen. Wenn Sie sie schließen, wird ein Cookie gesetzt, der sie für immer verschwinden lässt. Der Name des Cookies wird aus der id der spezifischen obersten Nachricht, die Sie schließen, übernommen.lesen dynamisch erstellte Cookie-Namen

ich habe einen Basiscode zum Erstellen, Lesen und das Cookie zu löschen, die so geht:

function createCookie(name, value, days) { 
    if (days) { 
     var date = new Date(); 
     date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); 
     var expires = "; expires=" + date.toGMTString(); 
    } else 
     var expires = ""; 
    document.cookie = name + "=" + value + expires + "; path=/"; 
} 

function readCookie(name) { 
    var nameEQ = name + "="; 
    var ca = document.cookie.split(';'); 
    for (var i = 0; i < ca.length; i++) { 
     var c = ca[i]; 
     while (c.charAt(0) == ' ') 
     c = c.substring(1, c.length); 
     if (c.indexOf(nameEQ) == 0) 
      return c.substring(nameEQ.length, c.length); 
    } 
    return null; 
} 

function eraseCookie(name) { 
    createCookie(name, "", -1); 
} 

und i erstellen, um die dynamische genannten Cookies wie folgt aus:

if ($(".timed-top-message").size() > 0) { 
    $(".timed-top-message").on("click", "i", function() { 
     var CookieUniqueIdentifier = $(this).parent().attr("id") 
     $(this).parent().fadeOut(200); 

     createCookie(CookieUniqueIdentifier, 'true', 100000) 
     console.log('cookie created'); 
    }); 
} 

und dies tut die Arbeit. Mein Problem ist, wenn ich den Keks lesen muss. Dies wirft einen Fehler:

(function() { 
    var checkForCookiez = readCookie(CookieUniqueIdentifier); // i read the cookie 
    if (!checkForCookiez) { // if it doesn't exist 
     console.log('it does not exist') 
    } else{ // if it does exist 
     console.log('it does exist') 
    } 
})(); 

der Fehler

app.js:1142 Uncaught ReferenceError: CookieUniqueIdentifier is not defined

ich bekommen, dass CookieUniqueIdentifier in einem Klick-Funktion scoped ist, und es kann nicht abgerufen werden. Aber was ich erreichen möchte, ist ein System, um Cookies dynamisch zu erstellen, die durch eine eindeutige id benannt werden und folglich dynamisch lesen.

Ich bin nicht sehr gut mit jquery und ich fragte mich, ob ich auf dem richtigen Weg bin oder nicht. Jeder Vorschlag wird sehr geschätzt.

+0

Was ist der Fehler, den Sie bekommen? Beachten Sie, Sie haben einen Syntaxfehler in der 'console.log' Anweisung enthält ein' ' – JavaKungFu

+0

@JavaKungFu aktualisiert gerade die Frage – valerio0999

+0

Ich sehe 2 Optionen hier. Option 1: Behalte ein Array im Bereich der IDs der gespeicherten Cookies. Option 2: Verwenden Sie 'document.cookie', um die Liste aller Cookies abzurufen und zu iterieren. Natürlich würde Option 1 nicht über mehrere Sitzungen hinweg bestehen, also ist sie möglicherweise nicht ideal. – JavaKungFu

Antwort

0

Ich denke, der beste Ansatz hier wäre das Lesen des Cookies vor dem Anzeigen der Warnmeldung (s) (beim Laden der Seite) und nur die Warnung anzeigen, wenn der Cookie nicht existiert. Sie haben diesen Teil des Codes nicht angezeigt, aber wenn Sie ihn hinzufügen, füge ich die entsprechenden Codeaktualisierungen hier hinzu.

+0

danke für Ihre Hilfe, aber ich denke, du bist von der Spur. :( – valerio0999

Verwandte Themen