11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour à tous !

J'ai une fonction javascript fonctionnant parfaitement lors de l'appui sur un bouton ou lors du clic sur un lien, mais ne fonctionnant pas du tout au chargement de la page (elle est lancée par un unique window.onload) !
Le plus étrange est que lorsque je met une alert() dans ma fonction l'alerte s'affiche bien au chargement de la page, mais tout le reste de ma fonction reste inutile.

Voici la page en question !

Vous verrez une alerte au chargement. Ensuite cliquez sur le lien "Sous-menu" du menu en haut à droite, et vous verrez que la même alerte s'affiche. Mais cette fois-ci, la fonction marche nickel, et mon menu se cache, puis réapparait si vous refaites un clic sur le même lien !

Ce que je veux c'est qu'au départ il soit masqué, mais javascript n'est apparemment pas d'accord :s



Autre détail amusant : hier ca marchait parfaitement, et je n'ai rien changé dans la fonction javascript depuis. Je dirais donc que le problème est dans la page, mais je n'ai touché qu'au menu et l'id de mon sous-menu est valable puisque la fonction marche correctement quand on clique sur le lien du Sous-menu !

Bref, je n'y capte plus rien, au secours XD
Modifié par Stabbquadd (16 Mar 2007 - 15:15)
Alors mon problème c'est que parfois j'ai un :

window.onload = show('under1');

Et si je met show; tout court tout mon menu se masquera tout entier toujours.
Donc je peut mettre un simple show; quand on est à l'accueil du site, mais par la suite il faudra bien que j'y inclue un paramètre !

Je vais faire le test pour voir si ca fonctionnerait avec un simple show('under1'); statique.


EDIT : non ca ne fonctionne pas. Le menu reste bien ouvert, mais parce que la fonction ne marche pas, pas parce qu'elle ouvre le menu comme demandé (la class ne change pas alors qu'elle devrait).
Modifié par Stabbquadd (16 Mar 2007 - 14:12)
C'est simple : window.onload doit contenir une fonction qui sera appelée au moment du chargement de la page. Si tu écris
window.onload = show('under1');
window.onload contient alors le résultat de l'appel à la fonction show (c'est-à-dire undefined).

Si tu veux passer un paramètre, tu peux par exemple écrire :
window.onload = function() {show('under1');};
C'est vrai que j'avais complètement oublié ce paramètre.
J'ai donc corrigé mon script, et il y a progrès : mon menu est masqué au chargement de la page. Et là vous voyez venir un "mais" de derrière les fagots avec une petite mine coupable et de grands yeux humides.

Oui, le menu est masqué, donc, mais (je sais pas faire de "mais" plus innocent que ça) celui-ci ne se déroule pas en partie comme prévu quand on arrive sur cette page, en cliquant dans le sous-menu.

Mon objectif est que le sous-menu contenant l'élément sur lequel on a cliqué se déroule pour montrer cet élément sur lequel on a, justement, cliqué !

Et là rien à faire, ma fonction marche encore une fois que lorsqu'on clique sur le lien, et pas lorsqu'on arrive sur la page liée précédemment :s
Modifié par Stabbquadd (16 Mar 2007 - 14:46)
Si j'ai bien compris ton besoin, il faut soit que tu enregistres l'état du menu dans un cookie pour le restaurer au chargement de la page, soit que tu inclues dans chaque page un bout de code JavaScript qui te dit quels menus dérouler par défaut.
En fait quand tu arrives sur la page que j'ai liée dans mon précédent message, tu as :
window.onload = function() { show('under1'); }


et le navigateur effectue un truc qui serait noté :
window.onload = function() { show(); }


C'est à dire qu'au lieu de masquer les menus sauf celui que je lui transmet comme lors d'un clic sur le lien qui déroule le menu, et bien il se contente de masquer tous les menus et en reste là !
Donc le code est déjà là pour faire ce que je veux, sauf qu'il ne fonctionne pas correctement, et pas moyen de trouver pourquoi.





EDIT : j'ai trouvé d'où vient le problème et je cherche comment le résoudre.

En fait au chargement les menus sont tous ouvert, donc il retient que mon "under1" est ouvert. Ensuite il les ferme tous, et enfin, si "under1" est fermé il l'ouvre. Sauf qu'il prend le statut au chargement de la page, soit ouvert, et non fermé tel qu'il est une fois la fonction effectuée.

Moralité : ma fonction, de par sa conception, ne fonctionne qu'un fois tous les menus fermés. Il faut donc que je fasse au démarrage de la page :
window.onload = function() { show(); show('under1'); }


Comme ca il ferme d'abord tous les menus, puis il ferme tous les menus et ouvre celui que je veux afficher !
Modifié par Stabbquadd (16 Mar 2007 - 15:05)
Tu es toujours sur la même page de test ? Parce que j'y lis :
window.onload = function() { show(''); }

<edit>Sujet résolu alors ? Smiley smile </edit>
Modifié par Julien Royer (16 Mar 2007 - 15:07)
Ca fonctionne :

Une page à la racine du site est surlignée en rouge
Une page dans un sous-menu est surlignée, et on déroule le sous-menu pour la montrer. On passage on surligne le sous-menu et la page en question Smiley smile


Merci pour ton aide car sans ta remise au point au départ sur le window.onload je n'y serais pas arrivé !


EDIT : au passage je signale que les sources de ce site seront mises à disposition sous licence libre pour aider ceux que ca pourrait intéresser. Les scripts php inclus, bien entendu.
Le but est de faire une "base" de site en CSS totalement libre. J'espère dans le futur avoir de l'aide d'autre programmeur du libre, mais pour l'instant je veux au moins terminer le squelette avant de mettre à disposition les sources Smiley smile
Modifié par Stabbquadd (16 Mar 2007 - 15:10)