IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

un menu géré avec javascript sur plusieurs niveaux (logique)


Sujet :

JavaScript

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    239
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 239
    Points : 84
    Points
    84
    Par défaut un menu géré avec javascript sur plusieurs niveaux (logique)
    Salut,

    Le problème suivant est un problème de logique pur et dur !

    L'objectif est d'afficher (display:block) l'arborisation d'un menu progressivement onmouseover sur les éléments de l'arborisation et de les cacher (display:none) selon certaine condition onmouseout.

    L'arborisation est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    menu
        menu1
            sousmenu1
                sousmenu11
                    soussousmenu11
                    soussousmenu12
                sousmenu12
                    soussousmenu21
                    soussousmenu22
                sousmenu13
        menu2
    On note que l'on fera un onmouseover sur un menu1 et un sousmenu11 (groupement d'entités) tandis que l'on fera un onmouseout sur un sousmenu1 et un soussousmenu11 (une seule entité)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    <div id="menu">
    	<div id="menu1" onmouseover="affiche(this,2,'');">
    		<a href="#" onclick="myfunction();">Ajouter</a>
    		<div id="sousmenu1" onmouseout="affiche(this,2,'');">
    			<div id="sousmenu11" onmouseover="affiche(this,2,'');">
    				<a href="#" onclick="myfunction();">Materiel</a>
    				<div id="soussousmenu11">
    					<div>
    						<a href="#" onclick="myfunction();">Informations du Materiel</a>
    						<a href="#" onclick="myfunction();">Fichiers du Materiel</a>
    						<a href="#" onclick="myfunction();">Levageurs du Materiel</a>
    					</div>							
    				</div>
    			</div>
    		</div>
    		<div>
    			<a href="#" onclick="myfunction();">Constructeur</a>
    		</div>
    		<div>
    			<a href="#" onclick="myfunction();">Levageur</a>
    		</div>
    		<div>
    			<a href="#" onclick="myfunction();">Type</a>
    		</div>
    		<div>
    			<a href="#" onclick="myfunction();">Localisation</a>
    		</div>
    		<div>
    			<a href="#" onclick="myfunction();">Deplacement</a>
    		</div>
    	</div>
    	<div id="menu2" onmouseover="affiche(this,2,'');">
    		<a href="#" onclick=":myfunction();">Mofifier</a>
    		<div id="sousmenu2" onmouseout="affiche(this,2,'');">
    			<div id="sousmenu21" onmouseover="affiche(this,2,'');">
    			<a href="#" onclick="myfunction();">Materiel</a>
    				<div id="soussousmenu21">
    					<div>
    						<a href="#" onclick="myfunction();">Informations du Materiel</a>
    						<a href="#" onclick="myfunction();">Fichiers du Materiel</a>
    						<a href="#" onclick="myfunction();">Levageurs du Materiel</a>
    					</div>							
    				</div>
    			</div>
    		</div>
    	</div>
    </div>
    pour afficher l'arborescence, le onmouseover est simple on demande d'afficher le sousmenu enfant de celui sur lequel on se trouve:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    function affiche(obj,nSM,idSSM) {
    	var id = obj.id;
    	var nSSM = 6;
    	//var j = '';
     
    	for(var i=1;i<=nSM;i++) {
    		for(var j=1;j<=nSSM;j++) {
    			if(document.getElementById('sousmenu'+i+j)) {
    				document.getElementById('sousmenu'+i+j).style.display = "none";
    				}
    			}
    		document.getElementById('sousmenu'+i).style.display = "none";
    		}
     
    	if(document.getElementById('sous'+id)) {
    		document.getElementById('sous'+id).style.display = "block";
    		}
    	}
    Maintenant, le problème c'est de rajouter les bonnes conditions sur ce onmouseover pour que lorsqu'il reset tous les block de menu à chaque fois de tel sorte que onmouse out on fait aussi affiche() et il reset tout à display="none"

    Le souci maintenant c'est qu'il ne veut plus m'afficher materiel qui contient une sous arborescence et je ne comprend pas pourquoi ??

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    239
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 239
    Points : 84
    Points
    84
    Par défaut
    Bon j'ai modifié le code Javascript gérant le menu...

    Maintenant, les soussousmenu s'affichent bien. Seulement si on sort du block parent (sousmenu) pour sortir vers la page ou pour se diriger vers le block enfant (soussousmenu) le menu disparait.

    Je souhaiterais que s'il existe des soussousmenu(11, 12) rattachés au sousmenu11, un temps d'attente de peu de temps soit accordé pour permettre à l'utilisateur de se diriger vers les soussousmenu s'il le souhaite OU le menu disparait si sa souris est hors du menu

    De même, le soussousmenu s'affiche même lorsque la souris n'est pas positionné sur le boutton auquel il se rattache... J'aimerais qu'il disparaisse si la souris est détecté onmouseover un autre bouton du même block

    Code Javascript : (à l'arrache)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    function affiche(obj,nSM,idSSM) {
    	var id = obj.id;
    	var nSSM = 6;
    	//var j = '';
     
    	for(var i=1;i<=nSM;i++) {
    		/*for(var j=1;j<=nSSM;j++) {
    			if(document.getElementById('sousmenu'+i+j)) {
    				document.getElementById('sousmenu'+i+j).style.display = "none";
    				}
    			}*/
    		document.getElementById('sousmenu'+i).style.display = "none";
    		}
     
    	if(document.getElementById('sous'+id)) {
    		document.getElementById('sous'+id).style.display = "block";
    		}
    	}

  3. #3
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 666
    Points
    66 666
    Billets dans le blog
    1
    Par défaut
    setTimeout ?

Discussions similaires

  1. Menu avec select sur plusieurs lignes
    Par jfox dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 23/07/2012, 15h11
  2. Parser flux xml avec balises sur plusieurs niveaux
    Par Freedolphin dans le forum XQUERY/SGBD
    Réponses: 3
    Dernier message: 19/09/2011, 15h39
  3. Réponses: 5
    Dernier message: 04/07/2011, 20h55
  4. Binding d'un TreeView sur plusieurs niveaux avec images
    Par Spikuria dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 25/05/2009, 17h17
  5. Réponses: 3
    Dernier message: 20/08/2008, 10h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo