Problème avec getElementById()

Mammouth du PHP | 1511 Messages

05 août 2006, 00:16

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 :)
@+
Modifié en dernier par momox le 05 août 2006, 10:08, modifié 1 fois.

Mammouth du PHP | 1511 Messages

05 août 2006, 01:42

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 :)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

05 août 2006, 14:53

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 :)

Mammouth du PHP | 1511 Messages

05 août 2006, 19:26

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
@+

Administrateur PHPfrance
Administrateur PHPfrance | 3131 Messages

05 août 2006, 20:19

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; } ;)

Mammouth du PHP | 1511 Messages

05 août 2006, 20:28

dans ce cas la, il va falloir que j'ajoute du css avec le php a chaque fois que je charge la page?
@+

Administrateur PHPfrance
Administrateur PHPfrance | 3131 Messages

06 août 2006, 10:11

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 ;)

Mammouth du PHP | 1511 Messages

06 août 2006, 11:01

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:
@+