Besoin d'aide pour menu dynamique

Signaler
Messages postés
38
Date d'inscription
samedi 28 août 2004
Statut
Membre
Dernière intervention
11 janvier 2007
-
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
-
Bonjour tout le monde

voilà je suis actuellement sur un menu javascript et j'aurai besoin de votre aide

les sous-menu s'ouvre au clique sur le menu, ce menu fonctionne actuellement correctement seulement voilà

1) il n'a pas compatible avec tout les navigateur
2) les sous-catégorie ne ce referme sauf si vous cliquez sur un autre menu

je voudrais donc avec votre aide :

1) le rendre compatible avec tous les navigateur
2) premetre la fermeture des sous-menu au second clic sur le titre menu

Ceci n'est pas ma source, je l'ai récupérer il y'a quelque temps sur un site dont je ne pourrait plus vous dire le nom

entre head et /head

<script type="text/javascript">
<!--
window.onload=montre;
function montre(id) {
var d = document.getElementById(id);
for (var i = 1; i<=10; i++) {
if (document.getElementById('smenu'+i)) {document.getElementById('smenu'+i).style.display='none';}
}
if (d) {d.style.display='block';}
}
//-->
</script>

entre body et /body

<!-- table contenant le menu -->
<!-- premier menu -->
----

Menu Titre 1,

<!-- contenu du menu -->
----

lien 1
lien 2
etc...,

----

<!-- deuxième menu -->
Menu Titre 2,

<!-- contenu menu 2 -->
----

lien 3
lien 4
etc...


celà nous donne

Menu Titre 1
Menu Titre 2

dont le contenu s'ouvre au clic et fonctionne parfaitement, vous remarquerez que je n'utilise pas les div mais les tableaux ( tr & td ) pour une question de pratique, j'ai déjà vue les script permettant ce que je désire mais chaque lien de menu doit être définit à chaque fois et dont le résultat ce bug si vous mettez du code html, ici je peut donc mettre ce que je veut dans mon menu et l'associer à une base de données très simplement ( ce que je fait pour l'instant et fonctionne parfaitement avec des informations tel statistique, compte, images partenaires, etc...)

pourriez-vous m'aider à le rendre compatible avec tout les navigateur et permettre la fermeture au second clic

Je vous remercie d'avance de votre aide, d'autant plus que je commence seulement avec le javascript ( je suis plus coter PHP - Mysql )

5 réponses

Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
36
Bonjour,
1) le rendre compatible avec tous les navigateur
fonctionne avec IE,FF... tous ? c'est trop pour moi.
2) premetre la fermeture des sous-menu au second clic sur le titre menu
dans la boucle, si le style est block le mettre hidden, par exemple ?

for (var i = 1; i<=10; i++) {
ça limite donc à 10 lignes,
while document.getElementById('smenu'+i) { } en faisant jouer le i
permettrait de pas être limité, par exemple aussi.

onclick="javascript:montre(.... c'est un pléonasme,
onclick="montre(... suffit.

Cordialement. Bul. ~ Mon Site qu'il est à Moi ~<FO>
</FO>
</S< body>
Messages postés
38
Date d'inscription
samedi 28 août 2004
Statut
Membre
Dernière intervention
11 janvier 2007

oki

comme je débute vais essayer de comprendre lol, donc
plutot que onclick="javascript:montre(..
je met onclick="montre(....

effectivement ca marche aussi :D very merci pour cette astuce qui est plus une règle je pense non ?

oui j'ai retirer le 10 et ajouter une variable global " nbMenu " indiquant le nombre de menu et donc le nombre de boucle maximum, ce nombre est récupérer grace à une requete sql et fonctionne aussi :D

pour ce qui est des navigateur je me suis mal expliquer je voudrais pas tous c'est beaucoup trop, juste les plus utiliser
IE, Mozilla, NS, etc.. les plus utiliser quoi
mais j'ai lu quelques part que

document.getElementById

était compatible avec tous les navigateur, infos ou intox ?
pour le fait de masquer le sous-menu je m'explique

mais sous-menu s'ouvre au click, je voudrais pouvoir les fermer ( masquer ) avec un autre click comme pour le menu xp

je met ma source actuel, attention j'ai du intéragir avec PHP pour récupérer le nombre de menu et mon script ce retrouve dans un echo mais je vous rassure il fonctionne bien sans erreur :D

--------- SOURCE HEAD--------

echo "<script type="text/javascript">\n"
. "<!-- \n"
. "window.onload=montre; \n"
. "\n"
. "function montre(num) {\n"
. "\n"
. "nbMenu = " . $nb_menu . ";\n"
. "\n"
. "var mn = document.getElementById('smenu' + num);\n"
. "\n"
. "for (var i = 1; i<=nbMenu; i++)\n"
. "{ \n"
. "if (document.getElementById('smenu'+i)) {document.getElementById('smenu'+i).style.display='none';}\n"
. "}\n"
. "\n"
. "if (mn) {mn.style.display='block';}\n"
. "}\n"
. "//-->\n"
. "</script>\n";

--------- FIN SOURCE ------------

merci de ton aide bultez, il est zoli ton site à toi :D et j'ai vue plusieur truc intéressant :D félicitation
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
36
>>merci pour cette astuce qui est plus une règle
pas une astuce, une règle je ne sais pas, mais inutile, ça oui
>>document.getElementById était compatible avec tous les navigateurs
IE,FF, NetScape,Opera ( je pense )... les autres ???
>>je voudrais pouvoir les fermer ( masquer ) avec un autre click
je nous cite :
2) premetre la fermeture des sous-menu au second clic sur le titre menu
dans la boucle, si le style est block le mettre hidden, par exemple ?

echo ... chacun ses gouts , moi je préfère :

<script type="text/javascript"><!--
window.onload=montre;
function montre(num) {
nbMenu = <?php echo $nb_menu; ?>;
var mn = document.getElementById('smenu' + num);
......

ça me semble plus lisible, mais ce n'est que mon avis,
qui ne vaut pas grand chose et encore une fois,
chacun fait comme il lle sent, il n'y a pas de règles
ni de vérité absolue....

Cordialement. Bul. ~ Mon Site qu'il est à Moi ~<FO>
</FO>
</S< body>
Messages postés
38
Date d'inscription
samedi 28 août 2004
Statut
Membre
Dernière intervention
11 janvier 2007

dans la boucle, si le style est block le mettre hidden, par exemple ?

ben quand tu dit le mettre hidden c'est le masquer ?
le problème c'est que je ne sais pas du tout comment ( dans la boucle ) savoir si il est block ou pas :s

c'est vrai que ta facon parait plus lisible sur ce chti bout de code, mais mon fichier contient près de 1500 lignes et la ca devient galère avec tout les <? et ?> ici l'avantage est que je ne suis pas obliger à chaque fois d'ouvrir et fermer la balise php ni devoir à chaque fois déclarer l'echo, mais comme tu as dit tout les gouts sont dans la nature :D

sinon pour le problème de compatibilité, j'ai patoger un peut sur le net avec mon ami google et effectivement " document.getElementById " est compatible avec les navigateur les plus utilisé donc ce problème est résolu

il ne me reste plus qu'a comprendre comment savoir si le sous-menu est block ou non, en gros oui au second clic il devrait être hidden, sauf que hidden n'est pas approprier pour mon script car les balise <tr> et <td> ne possède pas l'attribut hidden

en clair un clic sur le menu ouvre le sous-menu et un second clic sur ce meme titre le referme

encore merci bultez de ton aide, et encore bravo pour " le site qu'il est à toi ", j'ai déjà apris quelques truc merci, par contre j'ai voulu laisser un commentaire sur ton site mais il ne le prend pas ( j'ai essayer à 3 reprise mais sans succès )
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
36
>>je ne sais pas du tout comment ( dans la boucle ) savoir si il est block ou pas
"il suffit" ( oui je sais c'est agaçant d'entendre ça ) de le tester
if ( document.getElementById('smenu'+i).style.display=='block' )
et ce n'est pas hidden ( valable pour visibiliyt mais bien none )
>>j'ai déjà apris quelques trucs
tant mieux, et merci du retour.
>>j'ai voulu laisser un commentaire sur ton site
il va falloir que je contrôle, ça marchait, j'ai du faire une c%ùµ*¤¤@

Cordialement. Bul. ~ Mon Site qu'il est à Moi ~<FO>
</FO>
</S< body>