Page 1 sur 1

Problème avec getElementById()

Posté : 05 août 2006, 00:16
par momox
Bonsoir,
j'ai programmé une petite chose pour mon site qui permet de faire disparaitre le menu, mais j'ai quelques problèmes avec les fonctions addLoadEvent et setCookie.
Voila le code actuel de mon script:
function switchMenu() {
	if (document.getElementById("menu").style.display == "block") {
		document.getElementById("menu").style.display = "none";
		document.getElementById("arrow_menu").src = "/design/1/images/icones/forward.png"
		setCookie("menu", "visible");
	}
	else {
		document.getElementById("menu").style.display = "block";
		document.getElementById("arrow_menu").src = "/design/1/images/icones/rewind.png"
		setCookie("menu", "hidden");
	}
}
function verifMenu() {
	if(getCookie("menu") == "hidden") {
		switchMenu();
	}
}
addLoadEvent(verifMenu());
Mon problème est que firefox me dit que addLoadEvent n'est pas défini et idem pour mes deux setCookie.
Pourtant, je ne pense pas m'être planté dans mon script :/
Si une personne savait quelles erreurs j'ai pu commettre.
Merci d'avance :)
@+

Posté : 05 août 2006, 01:42
par momox
J'ai résolu la majeure partie des problèmes en ajoutant les fonctions manquantes au script mais je suis confronté a un nouveau problème:
function switchMenu() {
	if (document.getElementById("menu").style.display == "block") {
		document.getElementById("menu").style.display = "none";
		document.getElementById("body").style.width = "99%";
		document.getElementById("arrow_menu").src = "/design/1/images/icones/forward.png"
		setCookie("menu", "visible");
	}
	else {
		document.getElementById("menu").style.display = "block";
		document.getElementById("body").style.width = "79%";
		document.getElementById("arrow_menu").src = "/design/1/images/icones/rewind.png"
		setCookie("menu", "hidden");
	}
}
function setCookie(name, value, expires, path, domain, secure) {
  var curCookie = name + "=" + escape(value) +
      ((expires) ? "; expires=" + expires.toGMTString() : "") +
      ((path) ? "; path=" + path : "") +
      ((domain) ? "; domain=" + domain : "") +
      ((secure) ? "; secure" : "");
  document.cookie = curCookie;
}
function getCookie(name) {
  var dc = document.cookie;
  var prefix = name + "=";
  var begin = dc.indexOf("; " + prefix);
  if (begin == -1) {
    begin = dc.indexOf(prefix);
    if (begin != 0) return null;
  } else
    begin += 2;
  var end = document.cookie.indexOf(";", begin);
  if (end == -1)
    end = dc.length;
  return unescape(dc.substring(begin + prefix.length, end));
}
function fixDate(date) {
  var base = new Date(0);
  var skew = base.getTime();
    date.setTime(date.getTime() - skew);
}

function switchMenu() {
	if (menu_hidden) {
		menu_hidden=0;
		if (document.getElementById("menu").style.display) {
			document.getElementById("menu").style.display = "block";
		}
		document.getElementById("body").style.width = "79%";
		document.getElementById("arrow_menu").src = "/design/1/images/icones/rewind.png"
		setCookie("menu", "visible");
	}
	else {
		menu_hidden=1;
		document.getElementById("menu").style.display = "none";
		document.getElementById("body").style.width = "99%";
		document.getElementById("arrow_menu").src = "/design/1/images/icones/forward.png"
		setCookie("menu", "hidden");	
	}
}
function verifMenu() {
	if(getCookie("menu") == "hidden") {
		switchMenu();
	}
}function addLoadEvent(func)
{
	var oldonload = window.onload;
	if (typeof window.onload != 'function') {
		window.onload = func;
	}
	else {
		window.onload = function()
		{
			oldonload();
			func();
		}
	}
}
addLoadEvent(verifMenu());
Le problèeme est que la console javascript de firefox me dit que
document.getElementById('menu') has no properties
Pourtant j'ai bien <div id="menu"> dans mon script, je comprends pas :?
Si une ame charitable saurait m'aider, je la remercie par avance :)

Posté : 05 août 2006, 14:53
par Ryle
Ton div est il déclaré avant que tu ne fasses appel à tes fonctions javascript ? Lorsque tu fais appel à une fonction pendant le chargement de la page, javascript l'exécute au moment où tu le lui demandes. Si le div arrive après, il ne le connaitra pas et ne pourra y faire référence.

Si c'est bien cela, tu peux réorganiser ton code pour le placer avant, ou bien faire l'appel à ta fonction javascript dans le onLoad="" du <body> pour qu'elle ne s'exécute qu'une fois la page entierement lue :)

Posté : 05 août 2006, 19:26
par momox
Le problème est que si je fais <body onload="verifMenu()"> , j'ai un court laps de temps pendant lequel mon menu va être affiché, ce qui est fort embetant... :? ca fait une sorte de cassure... :?
Pour voir le resultat, allez a la page suivante, fermez le menu et faites f5 > http://geekimo.homelinux.net/design.html
@+

Posté : 05 août 2006, 20:19
par naholyr
Le problème est que si je fais <body onload="verifMenu()"> , j'ai un court laps de temps pendant lequel mon menu va être affiché, ce qui est fort embetant... :?
Pas avec un petit style CSS du genre #menu { display: none; } ;)

Posté : 05 août 2006, 20:28
par momox
dans ce cas la, il va falloir que j'ajoute du css avec le php a chaque fois que je charge la page?
@+

Posté : 06 août 2006, 10:11
par naholyr
Pourquoi l'ajouter en PHP et ne pas le mettre en dur dans la page ?
Tout ceci c'est du HTML/JS, PHP n'a pas son mot à dire à ce niveau ;)

Posté : 06 août 2006, 11:01
par momox
Chuis encore qu'un pauvre débutant en javascript :lol:
Et puis bon, php devra servir de toutes facons, et puis j'ai une fonction parse_header dans ma classe de templates qui ne demande qu'a être utilisée :lol:
@+