2011-09-22 4 views
0

pourquoi ne sont pas les cookies enregistrés quand je lance le script suivant:Pourquoi les cookies ne sont-ils pas sauvegardés?

window.onload=init; 

function init() { 
var userName=""; 
if(document.cookie != "") { 
    username=document.cookie.split("=")[1]; 
} 

document.getElementById("name_field").value = username; 
document.getElementById("name_field").onblur = setCookie; 
} 

function setCookie() { 
var exprDate = new Date(); 
exprDate.setMonth(exprDate.getMonth() + 6); 

var userName = document.getElementById("name_field").value; 
document.cookie = "username=" + username + ";path=/;expires=" + exprDate.toGMTString(); 
} 

Quand j'actualisez la page du text-field se vide? pourquoi est-ce? HTML

<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Untitled Document</title> 
<script type="text/javascript" src="writing_cookie.js"> 
</script> 
</head> 

<body> 
<form> 
<label>Enter your name&nbsp;&nbsp;<input type="text" id="name_field" /></label> <br/> 
<input type="submit" value="submit" /> 
</form> 
</body> 
</html> 
+1

'userName' est référencée comme' username' deux fois - est-ce pas? – pimvdb

+0

@ pimvdb Non. J'ai corrigé cela mais rien n'a changé –

+0

Fonctionne bien pour moi avec les problèmes majuscules/minuscules corrigés. http://jsfiddle.net/hEXKe/ – James

Répondre

0

Comme @pimvdb dit, vous mélangez le cas de nom d'utilisateur.

En javascript, les choses sont sensibles à la casse - userName n'est pas la même variable que nom d'utilisateur donc vous devez être consitant avec votre boîtier.

Le problème spécifique est que vous attribuez la valeur du name_field à userName dans setCookie(), mais sur la ligne suivante vous enregistrez nom d'utilisateur au cookie. Le nom d'utilisateur n'est pas initialisé, donc vous enregistrez une valeur vide dans le cookie. Cette valeur vide est ce que vous obtenez du cookie dans init()

Aussi, en vous init() déclariez userName mais affecter la valeur du cookie nom d'utilisateur. Cela ne pose pas vraiment de problème, mais cela pourrait être corrigé tout de même.

Edit - Je viens de voir votre réponse au commentaire de @ pimvdb et fait un peu plus de recherche:

Lors de la lecture du cookie, vous devez diviser le « ; », pas « = ». Cela vous donnera alors un tableau de "nom d'utilisateur = nom d'utilisateur", "chemin = chemin" et "expire = date". Ensuite, vous voulez extraire le nom d'utilisateur du premier élément du tableau en recherchant le « = »

Votre code se divise sur « = » qui donnerait un tableau de « nom d'utilisateur », « nom d'utilisateur; chemin », " /; expire "et" date ".

Je m'attendais à ce qu'il ait mis quelque chose dans le champ de texte avec votre code (après que vous ayez réglé le problème de casing).

(page de référence here)

+0

S'il vous plaît référence [Quirksmode - Cookies] (http://www.quirksmode.org/js/cookies.html) plutôt que w3schools –

Questions connexes