Cookies en JS
Résolu/Fermé
A voir également:
- Uncaught referenceerror: getcookie is not defined
- Supprimer les cookies - Guide
- La cause de ce problème peut être la désactivation ou le refus des cookies. ✓ - Forum PHP
- Js/kryptik.ad ✓ - Forum Virus
- Extension refuser cookies - Guide
- Copiez l'image dans un logiciel d'édition d'images ou un outil en ligne comme js paint ou pixlr e. remplissez les cases en suivant le code couleur. des cases supplémentaires vont se remplir automatiquement. que représente le dessin ? ✓ - Forum Photoshop
3 réponses
Jithel
Messages postés
843
Date d'inscription
mercredi 20 juin 2018
Statut
Membre
Dernière intervention
31 août 2021
171
28 févr. 2019 à 14:57
28 févr. 2019 à 14:57
Je suspecte que la valeur "i" de "spanD" + i ne varient pas entre les bonnes valeurs (ici de 0 à img.length).
Je ne vois pas, sauf erreur de ma part, de code qui appelle set et getCookie. En particulier, j'aurais besoin du code qui appelle setCookie(…)
Je ne vois pas, sauf erreur de ma part, de code qui appelle set et getCookie. En particulier, j'aurais besoin du code qui appelle setCookie(…)
jordane45
Messages postés
38346
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2024
4 717
28 févr. 2019 à 22:41
28 févr. 2019 à 22:41
Bonjour,
Visiblement ta fonction CreateCookie n'est pas fermée (tu as oublié une accolade )
Je n'ai pas testé.. mais ça devrait déjà mieux fonctionner
Visiblement ta fonction CreateCookie n'est pas fermée (tu as oublié une accolade )
Je n'ai pas testé.. mais ça devrait déjà mieux fonctionner
jQuery(document).ready(function($) { $('.disabled').click(function () { $(this).each(function(){ var classes = ['disabled','enabled']; this.className = classes[($.inArray(this.className, classes)+1)%classes.length]; }); }); function getCookie(name){ let data=RegExp(name+"[^;]+").exec(document.cookie); return decodeURIComponent(!!data?data.toString().replace(/^[^=]+./,""):""); } function setCookie(name,value,days) { var date = new Date(); date.setTime(date.getTime()+(days * 365));// Sans date d'expiration il disparaît à la fin de la session(normalement), ce qui est pas mal aussi document.cookie = name + "=" + value + ";path=/;expires=" + d.toGMTString(); } let img = $('img'); for(let i=0;i<img.length;i++){ if(getCookie('spanD'+i)==='1'){// Teste cookie spanD+Number img[i].parentElement.className='enabled';// Met la classe du parent de l'image à disabled }else{ img[i].parentElement.className='disabled';// Met la classe du parent de l'image à enabled } img[i].click(function(e){ if(getCookie('spanD'+i)==='1'){// Teste cookie spanD+Number img[i].parentElement.className='enabled';// Met la classe du parent de l'image à disabled setCookie('spanD'+i,0); }else{ img[i].parentElement.className='disabled';// Met la classe du parent de l'image à enabled setCookie('spanD'+i,1);// Création du cookie spanD+Number=1 } }); } });
Merci d'avoir corrigé mon code, je n'avais même pas remarqué l'accolade non fermée. J'ai testé et ça n'enregistre pas les cookies. J'ai ensuite fait plusieurs tests dans le code en inversant les valeurs mais rien n'y fait. J'ai aussi été voir dans la console où apparemment, ça serait le getCookie le problème et ça aurait un lien avec jQuery, mais je vois pas trop le problème :
Merci beaucoup si vous voyez de quoi il s'agit.
jQuery.Deferred exception: getCookie is not defined ReferenceError: getCookie is not defined
at HTMLDocument.<anonymous> (script.js:31:21)
at j (https://code.jquery.com/jquery-3.2.1.slim.min.js:2:30203)
at k (https://code.jquery.com/jquery-3.2.1.slim.min.js:2:30517) undefined
jquery-3.2.1.slim.min.js:2 Uncaught ReferenceError: getCookie is not defined
at HTMLDocument.<anonymous> (script.js:31)
at j (jquery-3.2.1.slim.min.js:2)
at k (jquery-3.2.1.slim.min.js:2)
Merci beaucoup si vous voyez de quoi il s'agit.
jordane45
Messages postés
38346
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2024
4 717
>
Lucas63
1 mars 2019 à 20:14
1 mars 2019 à 20:14
Il t'indique qu'il ne trouve pas la fonction getCookie
Sûrement une erreur de code avant cette fonction qui l'empèche de trouver la fonction...
Déplace les fonctions
avant la ligne
Sûrement une erreur de code avant cette fonction qui l'empèche de trouver la fonction...
Déplace les fonctions
function getCookie(name){ let data=RegExp(name+"[^;]+").exec(document.cookie); return decodeURIComponent(!!data?data.toString().replace(/^[^=]+./,""):""); } function setCookie(name,value,days) { var date = new Date(); date.setTime(date.getTime()+(days * 365));// Sans date d'expiration il disparaît à la fin de la session(normalement), ce qui est pas mal aussi document.cookie = name + "=" + value + ";path=/;expires=" + d.toGMTString(); }
avant la ligne
jQuery(document).ready(function($) {
jordane45
Messages postés
38346
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2024
4 717
2 mars 2019 à 15:58
2 mars 2019 à 15:58
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ACCUEIL - PROSTAGE </title> <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha256-k2WSCIexGzOj3Euiig+TlR8gA0EmPjuc79OEeY5L45g=" crossorigin="anonymous"></script> <link rel="shortcut icon" href="img/icon1.png"> </head> <body class="list"> <span class="disabled pictures" id='spanD01'><img src="img/test.png" ></span> <span class="disabled pictures" id='spanD02'><img src="img/test2.png" ></span> </body> <script type="text/javascript"> var getCookie = function(name) { var getCookieValues = function(cookie) { var cookieArray = cookie.split('='); return cookieArray[1].trim(); }; var getCookieNames = function(cookie) { var cookieArray = cookie.split('='); return cookieArray[0].trim(); }; var cookies = document.cookie.split(';'); var cookieValue = cookies.map(getCookieValues)[cookies.map(getCookieNames).indexOf(name)]; return (cookieValue === undefined) ? null : cookieValue; }; /** * alternative: get cookie by name with using a regular expression */ var getCookiebyName = function(name){ var pair = document.cookie.match(new RegExp(name + '=([^;]+)')); return !!pair ? pair[1] : null; }; /** * [Gets the cookie value if the cookie key exists in the right format] * @param {[string]} name [name of the cookie] * @return {[string]} [value of the cookie] */ var getCookie = function (name) { return parseCookies()[name] || ''; }; /** * [Parsing the cookieString and returning an object of the available cookies] * @return {[object]} [map of the available objects] */ var parseCookies = function () { var cookieData = (typeof document.cookie === 'string' ? document.cookie : '').trim(); return (cookieData ? cookieData.split(';') : []).reduce(function (cookies, cookieString) { var cookiePair = cookieString.split('='); cookies[cookiePair[0].trim()] = cookiePair.length > 1 ? cookiePair[1].trim() : ''; return cookies; }, {}); }; function setCookie(name,value) { var newCookie = name + "=" + value + ';'; console.log('Nouveau cookie :',newCookie); return document.cookie = newCookie; } function toggleClassEnable(curr){ if(curr.hasClass('disabled')){ setEnable(curr); }else{ setDisable(curr); } } function setEnable(curr){ curr.addClass('enabled'); curr.removeClass('disabled'); } function setDisable(curr){ curr.addClass('disabled'); curr.removeClass('enabled'); } function setClassByCookie(curr){ var cookieEnable = getCookie(curr.attr('id')); console.log('cookieEnable',cookieEnable); if(cookieEnable=='true'){ setEnable(curr); }else{ setDisable(curr); } } jQuery(document).ready(function($) { $('.disabled').click(function () { var curr = $(this); toggleClassEnable(curr); var valCook = getCookie(curr.attr('id')) == 'true' ? 'false' : 'true'; setCookie(curr.attr('id'), valCook); }); $('.pictures').each(function(i,el){ var curr = $(this); setClassByCookie(curr); }); }); </script> </body> </html>
jordane45
Messages postés
38346
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2024
4 717
>
Lucas63
2 mars 2019 à 22:41
2 mars 2019 à 22:41
Pour gérer les cookies correctement et specifier une durée de vie, je pense que tu peux t'orienter vers ça
https://github.com/js-cookie/js-cookie/blob/master/README.md
https://github.com/js-cookie/js-cookie/blob/master/README.md
Merci porur votre lien, ça va m'être utile pour gérer leur durée. J'aurais juste une dernière question, j'ai cherché sur l'API et Google mais j'ai rien trouvé à ce sujet et je pense connaître la réponse : peut-on augmenter le nombre maximum de cookies enregistrées par page sur un navigateur (150 pour Chrome) ? Si non, peut-on réunir tout en un ? Merci encore pour votre aide.
jordane45
Messages postés
38346
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2024
4 717
>
Lucas63
3 mars 2019 à 15:09
3 mars 2019 à 15:09
Tu peux stocker les etats de tes images dans un array et mettre cet array dans ton cookie.
Faudra ensuite modifier un peu ton code en conséquence
Faudra ensuite modifier un peu ton code en conséquence
28 févr. 2019 à 21:49