11548 sujets

JavaScript, DOM et API Web HTML5

Hellooooo

Je fais un site dans lequel j'ai un menu gauche et un menu droit. Chaque menu est composé de sous menu, et chaque sous menu à un titre et un contenu.
Je souhaite faire un JavaScript qui me permettrait de fermer et ouvrir le contenu de chaque sous menu et de garder en mémoire (cookie) si le menu est ouvert ou fermer.

Suis-je suffisament clair ? (vous pouvez voir un exemple de ce que je veux sur paradiz-team sauf que là il y a un reload)

J'ai réussi à faire la fonction javascript pour fermer et ouvrir le menu mais j'ai des problèmes avec le cookie. Voici ma fonction :


function open_close_menu(div,divImage) {
	var TIME_COOKIE = 3600;
	
	var element = document.getElementById(div);
	
	if (element.style.display == 'none')
		{
			element.style.display = 'block';
			divImage.style.backgroundImage = "url(../skin/skin_gpsactionreplay/menu/bouton_moins.gif)";
			setCookie(div,'open',TIME_COOKIE);
		}
	else
		{
			element.style.display = 'none';
			divImage.style.backgroundImage = "url(../skin/skin_gpsactionreplay/menu/bouton_plus.gif)";
			setCookie(div,'close',TIME_COOKIE);
		}
}



cette fonction marche très bien, les menus s'ouvrent et se ferme sans problème. Je souhaite aussi sauvegarder le choix dans un cookie par la fonction :

function setCookie(nom, valeur, expiration) {
	var cook = ""+nom + "=" + escape(valeur) +  ((expiration == null) ? "" : ("; expires=" +expiration))+";";
	document.cookie = cook;
}



j'ai aussi une fonction pour recupérer la valeur d'un cookie :

function getCookie(nom) {
	var recherche = nom+ "=";
	if (document.cookie.length > 0) {
		offset = document.cookie.indexOf(recherche);
			if (offset != -1) { // si le cookie existe
				offset += recherche.length;
				// position du début
				fin = document.cookie.indexOf(";",offset);
				// position de la fin
				if (fin == -1)
					fin=document.cookie.length;
				return unescape(document.cookie.substring(offset, fin));
			}
	}
}



Au démarrage de ma page, je regarde pour chaque menu si le menu doit être afficher ou non d'après la valeur du cookie, par la fonction :

function set_open_close_menu(id_sous_menu,divImage){
	var element = document.getElementById(id_sous_menu);
	
	if(getCookie(id_sous_menu) == 'close')
		{
			// si le sous menu doit etre close :
			element.style.display = 'none';
			divImage.style.backgroundImage = "url(../skin/skin_gpsactionreplay/menu/bouton_plus.gif)";
		}
	else
		{
			// si le sous menu doit etre open :
			element.style.display = 'block';
			divImage.style.backgroundImage = "url(../skin/skin_gpsactionreplay/menu/bouton_moins.gif)";
		}
}




Tout cela marche presque bien :
quand je clique sur le bouton d'un menu, il s'ouvre (se ferme) et je crois qu'il créer le cookie avec la valeur qui correspond. Quand je recharge ma page le menu et bien dans la même configuration (ouvert ou fermer) MAIS si je ferme mon navigateur et que je le ré-ouvre, alors tous les menus sont ouverts (comme s'il n'y avait pas de cookie).

Où ai je fait une erreur ? Dans ma fonction setCookie ? getCookie ?



Merkkiiii de m'aider


poich
Modifié par Poich (13 May 2005 - 19:14)
salut !!!
Qu'utilise tu pour faire tes test comme navigateur ???
Car si tu utilise Firefox, il se peut que celui soit configuré pour supprimer tous les cokies lors de la fermeture de sessions (ie peut le faire aussi) donc deja verifie se parametre.

sinon je voi pas ca a l'air corect a preimere vue.

bon courage et bon dev
j'utilise ie et firefox (et j'ai testé avec netscape) pour faire mes vérifications et c'est partout pareil ! Smiley decu

il n'y a pas de problème de config puisque sur les autres sites je garde bien les cookies !

Smiley sweatdrop Smiley sweatdrop
voilà ce qu'il manquait pour que ça marche ! Smiley smile Smiley biggrin

function setCookie(nom, valeur, nbDay) {
	var Expiration = new Date();
	Expiration.setTime(Expiration.getTime()+(nbDay*24*24*60));
	var cook = ""+nom + "=" + escape(valeur) +  "; expires=" +Expiration.toGMTString()+";";
	document.cookie = cook;
}


résolu