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 :

Menu d�roulant js non intrusif


Sujet :

JavaScript

  1. #1
    Membre chevronn�
    Avatar de ilood
    Inscrit en
    Mars 2005
    Messages
    468
    D�tails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 468
    Par d�faut Menu d�roulant js non intrusif
    Bonjour,

    J'aimerai cr�er un menu d�roulant sans � avoir � modifier le code html ci-dessous. J'ai commenc� un code js mais je n'arrive pas � r�cup�rer le num�ro du menu sur lequel la souris passe.
    Avez-vous une id�e ? Un exmple ?
    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
    <div id="menu">
        <dl>
            <dt>Titre 1</dt>
            <dd>
                <ul>
                    <li>item 1</li>
                    <li>item 2</li>
                    <li>item 3</li>
                </ul>
            </dd>
        </dl>
        <dl>
            <dt>Titre 2</dt>
            <dd>
                <ul>
                    <li>item 1</li>
                    <li>item 2</li>
                    <li>item 3</li>
                </ul>
            </dd>
        </dl>
    </div>
    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
    <script type="text/javascript">
    var PAGE = function(){
    	return {
    		addLoadEvent : function(e) {
    			if (window.addEventListener)
    	 			window.addEventListener('load', e, false);
    	  		else if (window.attachEvent)
    				window.attachEvent('onload', e);
    		},
    		menu : function(){
    			return {
    				init : function(){
    					this.deplie();
    				},
    				deplie : function(){
    					var _menu = document.getElementById('menu');
    					var _dls = _menu.getElementsByTagName('dl');
    					var _dt = new Array();
    					for(var i=0;i<_dls.length;i++){
    						var _dts = _dls[i].getElementsByTagName('dt');
    						_dt.push(_dts[0]);
    					}
    					for(var i=0;i<_dt.length;i++){
    						_dt[i].onmouseover = function(){
    							alert('Hello '+i);
    						}
    					}
    				}
    			}
    		}()
    	}
    }();
     
    PAGE.addLoadEvent(function(){
    	PAGE.menu.init();
    });</script>

  2. #2
    R�dacteur
    Avatar de marcha
    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    D�cembre 2003
    Messages
    1 571
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activit� : D�veloppeur Web

    Informations forums :
    Inscription : D�cembre 2003
    Messages : 1 571
    Par d�faut
    Salut,

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    _dt[i].onmouseover = function(i) {
        return function() { alert('Hello '+i); }
    }(i);
    Un peu de th�orie ici

  3. #3
    Membre chevronn�
    Avatar de ilood
    Inscrit en
    Mars 2005
    Messages
    468
    D�tails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 468
    Par d�faut
    Citation Envoy� par marcha Voir le message
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    _dt[i].onmouseover = function(i) {
        return function() { alert('Hello '+i); }
    }(i);
    Effectivement lorsque la page est charg� j'ai bien deux alertes avec les i bien incr�ment�s.
    Mais au survol des menus je n'ai plus d'alerte.

    Le but est qu'au survol du menu je puisse r�cup�rer son num�ro. Le but final �tant d'afficher un sous menu.

  4. #4
    Expert confirm�
    Avatar de le_chomeur
    Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2006
    Messages
    3 653
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 3 653
    Par d�faut
    pourquoi ?
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
     function(i) {
        return function() { alert('Hello '+i); }
    }(i);
    et non pas :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     function(i) {
        alert('Hello '+i);
    }(i);
    ?

  5. #5
    Membre Expert Avatar de DoubleU
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 106
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 106
    Par d�faut
    Parce qu'en �crivant ca, tu ex�cutes la fonction imm�diatement ^^

  6. #6
    Expert confirm�
    Avatar de le_chomeur
    Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2006
    Messages
    3 653
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 3 653
    Par d�faut
    ha vi n'avais point vu le param (i) planqu� :p

  7. #7
    R�dacteur
    Avatar de marcha
    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    D�cembre 2003
    Messages
    1 571
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activit� : D�veloppeur Web

    Informations forums :
    Inscription : D�cembre 2003
    Messages : 1 571
    Par d�faut
    Citation Envoy� par ilood Voir le message
    Effectivement lorsque la page est charg� j'ai bien deux alertes avec les i bien incr�ment�s.
    Mais au survol des menus je n'ai plus d'alerte.
    Tu peux reposter ton code actuel ?

  8. #8
    Membre chevronn�
    Avatar de ilood
    Inscrit en
    Mars 2005
    Messages
    468
    D�tails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 468
    Par d�faut
    Citation Envoy� par marcha Voir le message
    Tu peux reposter ton code actuel ?
    Au temps pour moi, je n'avais pas vu le return devant la fonction.
    Ca fonctionne maintenant.

    Je vais essayer de progresser avec ces �l�ments.

    Merci

  9. #9
    Membre chevronn�
    Avatar de ilood
    Inscrit en
    Mars 2005
    Messages
    468
    D�tails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 468
    Par d�faut
    J'ai r�ussi � obtenir ce que je souhaitais.

    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
    48
    49
    50
    var PAGE = function(){
    	return {
    		addLoadEvent : function(e) {
    			if (window.addEventListener)
    	 			window.addEventListener('load', e, false);
    	  		else if (window.attachEvent)
    				window.attachEvent('onload', e);
    		},
    		menu : function(){
    			return {
    				init : function(){
    					this.deplie();
    				},
    				deplie : function(){
    					var _menu = document.getElementById('menu');
    					var _dls = _menu.getElementsByTagName('dl');
    					var _dt = new Array(); var _dd = new Array();
    					for(var i=0;i<_dls.length;i++){
    						var _dts = _dls[i].getElementsByTagName('dt');
    						var _dds = _dls[i].getElementsByTagName('dd');
    						_dt.push(_dts[0]);
    						_dd.push(_dds[0]);
    					}
    					for(var i=0;i<_dt.length;i++){
    						_dt[i].onmouseover = function(i){
    							return function(){
    								_dd[i].style.display = 'block';
    								_dd[i].onmouseover = function(i){
    									return function(){
    										_dd[i].style.display = 'block';
    									}
    								}(i);
    							}
    						}(i);
    						_dt[i].onmouseout = function(i){
    							return function(){
    								_dd[i].style.display = 'none';
    								_dd[i].onmouseout = function(i){
    									return function(){
    										_dd[i].style.display = 'none';
    									}
    								}(i);
    							}
    						}(i);
    					}
    				}
    			}
    		}()
    	}
    }();
    Il y a peut-�tre des optimisations d'�criture, si vous souhaitez y participer, j'en prendrai note avec plaisir.

  10. #10
    Expert confirm�
    Avatar de le_chomeur
    Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2006
    Messages
    3 653
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 3 653
    Par d�faut
    quelques optimisation :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    var i=0;i<_dls.length;i++
    en
    var i = 0 , l = _dls.length ; i < l ; i++
    évite d'avoir a recalculer la taille du tableu a chaque boucle :)
    je te conseillerais �galement d'utiliser un tableau a plusieurs dimension mais bon apr�s c'est chacun ses pr�f�rences de code.

    pour le reste �a va ...

  11. #11
    R�dacteur
    Avatar de marcha
    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    D�cembre 2003
    Messages
    1 571
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activit� : D�veloppeur Web

    Informations forums :
    Inscription : D�cembre 2003
    Messages : 1 571
    Par d�faut
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    var _dt = new Array(); var _dd = new Array();
    // plus simplement:
    var _dt = [], _dd = [];

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Menu d�roulant / invisible ou non
    Par Invit� dans le forum Mise en page CSS
    R�ponses: 1
    Dernier message: 08/11/2011, 16h29
  2. menu d�roulant CSS : FF OK Opera OK Chrome NON
    Par charlene44 dans le forum Mise en page CSS
    R�ponses: 4
    Dernier message: 21/12/2010, 22h04
  3. Menu d�roulant largeur non fix�e
    Par samtheh dans le forum Mise en page CSS
    R�ponses: 3
    Dernier message: 30/09/2009, 16h02
  4. [ZF 1.7] [Element_Select] Menu d�roulant non rempli
    Par Deallyra dans le forum Zend_Form
    R�ponses: 6
    Dernier message: 18/05/2009, 17h36
  5. Menu d�roulant, non d�roulant sous IE :@
    Par PuppeT mAsTer dans le forum Mise en page CSS
    R�ponses: 6
    Dernier message: 14/06/2006, 11h24

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