11548 sujets

JavaScript, DOM et API Web HTML5

Pages :
Bonjour à tous !!
Voilà j'ai un problème de nul en Java Script...
J'ai 2 javascripts qui fonctionnent très bien séparement, mais dès que je les mets sur la même page, ça ne marche plus... galère !!

Quelqu'un peut-il m'aider ?? Il doit y avoir une "interférence" quelque part...

Voilà les 2 scripts à la suite, un pour simuler un :hover, et l'autre pour un menu déroulant en JavaScript.

Merci d'avance !!

sfHover = function() {
	var sfEls = document.getElementById("menu").getElementsByTagName("DL");
	for (var i=0; i<sfEls.length; i++) {
		sfEls[i].onmouseover=function() {
			this.className+=" sfhover";
		}
		sfEls[i].onmouseout=function() {
			this.className=this.className.replace(new RegExp(" sfhover\\b"), "");
		}
	}
}
if (window.attachEvent) window.attachEvent("onload", sfHover);

// Raccourci et création d'un objet
var d = document,
	o = {};

// Définition des propriétés de l'objet
o.Menu =
{

	// Chargement du menu
    __Load__: function()
	{

		// On lance le test pour s'assurer du bon fonctionnement
        o.Menu.__Test__();

    },

	// Test d'existence des méthodes et de la syntaxe xhtml
    __Test__: function()
	{

		// Si l'une des méthodes du script n'est pas interprétée ou si le menu n'existe pas, on stoppe le script.
        if ( !d.getElementById ||
		     !d.getElementsByTagName ||
		     !d.createElement ||
		     !d.createTextNode ||
		     !d.getElementById('menu') ||
		     !d.getElementById('menu').setAttribute ||
		     !d.getElementById('menu').replaceChild ||
		     !d.getElementById('menu').appendChild ||
		     !d.getElementById('menu').getElementsByTagName('dl') ) return false;

/*
		----- Tests facultatifs et non exhaustifs de bon augure ^^ -----
		----- Les codes contenus dans la zone suivante peuvent     -----
		----- être virés si vous êtes sûr de votre syntaxe xhtml.  -----
*/

		// Une fois le premier test effectué, on définit les variables nécessaires.
		var iA, iB, iC, iD,
			oMenu = d.getElementById('menu'),
			oDl = oMenu.getElementsByTagName('dl');

		// Pour chaque élément dl du tableau oDl,
		for ( iA = oDl.length - 1; iA >= 0; iA-- )
		{
			// on récupère les éléments dt dans un tableau.
			var oDt = oDl[iA].getElementsByTagName('dt');
			// Si le tableau oDt est vide, on stoppe le script.
			if ( !oDt ) return false;
		}
		
		// Pour chaque élément dl du tableau oDl,
		for ( iA = oDl.length - 1; iA >= 0; iA-- )
		{
			// on récupère les éléments dd dans un tableau oDd.
			var oDd = oDl[iA].getElementsByTagName('dd');
			// Si le tableau oDd est vide, on stoppe le script.
			if ( !oDd ) return false;
			// sinon
			else
			{
				// pour chaque élément dd du tableau oDd,
				for ( iB = oDd.length - 1; iB >= 0; iB-- )
				{
					// on récupère les éléments ul dans un tableau oUl.
					var oUl=oDd[iB].getElementsByTagName('ul');
					// S'il n'y a pas d'élément ul, on stoppe le script.
					if( !oUl ) return false;
					// sinon
					else
					{
						// pour chaque élément ul du tableau oUl,
						for ( iC = oUl.length - 1; iC >= 0; iC-- )
						{
							// on récupère les éléments li dans un tableau oLi.
							var oLi = oUl[iC].getElementsByTagName('li');
							// S'il n'y a aucun objet oLi, on stoppe le script.
							if( !oLi ) return false;
							// sinon
							else
							{
								// pour chaque élément li du tableau oLi,
								for ( iD = oLi.length - 1; iD >= 0; iD-- )
								{
									// on récupère l'élément a dans un objet oA.
									var oA = oLi[iD].getElementsByTagName('a')[0];
									// S'il n'y a pas d'objet oA, on stoppe le script.
									if( !oA ) return false;
								}
							}
						}
					}
				}
			}
		}
		
/*
		-----                                            -----
		----- Fin des tests facultatifs de bon augure ^^ -----
		-----                                            -----
*/

		// Une fois le test effectué, on initialise le menu.
		return o.Menu.__Init__();

	},

	// Méthode d'initialisation du menu
	__Init__:function()
	{

		// On définit les variables nécessaires.
        var iA,
			oMenu = d.getElementById('menu'),
			oDl = oMenu.getElementsByTagName('dl');

		// On cache tous les éléments dd en lançant la méthode dédiée à cette tâche.
        o.Menu.__HideLists__();

		// Pour chaque élément dl du tableau oDl,
        for ( iA = oDl.length - 1; iA >= 0; iA-- )
        {
			// On récupère l'élément dt.
            var oDt = oDl[iA].getElementsByTagName('dt')[0];
			// On crée un élément dt et un élément a
			var oNewDt = d.createElement('dt'),
				oA = d.createElement('a'),
				oTextA = d.createTextNode('');

			// On définit les propriétés de l'objet oA
			// (récupération du noeud texte de l'élément dt pour définir celui de l'élément a)
			oA.setAttribute('href','#');
            oTextA.data = oDt.firstChild.nodeValue;

			// On constitue l'arbre DOM en remplaçant l'élément dt du code xhtml
			// par celui qu'on vient de créer.
            oA.appendChild(oTextA);
            oNewDt.appendChild(oA);
            oDl[iA].replaceChild(oNewDt,oDt);

			// On définit des méthodes en fonction des actions de l'utilisateur.
			oA.onclick = o.Menu.__Discard__;
            oDl[iA].onmouseover = o.Menu.__MouseDisplay__;
            oA.onfocus = o.Menu.__TabDisplay__;
			oA.onkeypress = o.Menu.__TabDisplay__;
        }

    },

	// Méthode d'affichage de l'élément dd lorsqu'on le survole.
    __MouseDisplay__:function()
	{

		// On cache tous les éléments dd en lançant la méthode dédiée à cette tâche.
        o.Menu.__HideLists__();

		// On récupère l'élément dd de l'élément dl qu'on survole dans un objet.
        var oDd = this.getElementsByTagName('dd')[0];

		// On affecte la propriété css "display: block;" à l'objet oDd (affichage)
        oDd.style.display = 'block';

		// On cache l'élément dd lorsqu'on ne survole plus l'élément dl.
        this.onmouseout = o.Menu.__HideLists__;

    },

	// Méthode d'affichage de l'élément dd lorsqu'il prend le focus.
    __TabDisplay__:function()
	{

		// On cache tous les éléments dd en lançant la méthode dédiée à cette tâche.
        o.Menu.__HideLists__();

		// On récupère l'élément dd de l'élément dl qui a le focus dans un objet.
        var oDd = this.parentNode.parentNode.getElementsByTagName('dd')[0];

		// On affecte la propriété css "display: block;" à l'objet oDd (affichage)
        oDd.style.display = 'block';

		// On donne le focus au premier lien de l'élément dd traité.
        oDd.getElementsByTagName('a')[0].focus();

    },

	// Méthode de masquage des éléments dd
    __HideLists__:function()
	{

		// On définit les variables nécessaires.
        var iA,
			oDd = d.getElementById('menu').getElementsByTagName('dd');

		// Pour chaque élément dd du tableau oDd,
        for (iA = oDd.length - 1; iA >= 0; iA-- )
		{
			// On affecte la propriété css "display: none;" à l'objet oDd (masquage)
            oDd[iA].style.display = 'none';
		}

    },

	// Fonction d'annulation
    __Discard__:function()
	{

		// On annule l'action.
        return false;

    }

};

// Une fois que le document est chargé en mémoire, on charge le script.
window.onload=o.Menu.__Load__;
[/i][/i]
Modifié par kristof (08 Aug 2006 - 00:08)
Salut,

Je pense que ton souci vient du fait que tu charges la première fonction dans l'évènement onload (donc il sera executé lorsque la page sera chargée) et ensuite la deuxième fonction est également chargée dans le même évènement . Donc la première fonction n'est pas exécutée.

Pour solutionner cela, utilise cette fonction qui permet de charger plusieurs fonctions dans l'évènement onload :

// From Simon Willison, simon.incutio.com 
function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      if (oldonload) {
        oldonload();
      }
      func();
    }
  }
}


Supprime alors ces deux lignes qui sont actuellement dans ton fichier:

if (window.attachEvent) window.attachEvent("onload", sfHover);

et

window.onload=o.Menu.__Load__;


ensuite tu as juste à appeler dans ton fichier :

addLoadEvent(sfHover);
addLoadEvent(o.Menu.__Load__);

en oubliant pas d'y ajouter a fonction Smiley cligne
a+
Smiley bawling Smiley bawling Smiley bawling ça marche pas...
J'ai dû faire une bêtise surement, voilà mon code refait :
function addLoadEvent(func) {

  var oldonload = window.onload;

  if (typeof window.onload != 'function') {

    window.onload = func;

  } else {

    window.onload = function() {

      if (oldonload) {

        oldonload();

      }

      func();

    }

  }
}


// Raccourci et création d'un objet
var d = document,
	o = {};

// Définition des propriétés de l'objet
o.Menu =
{

	// Chargement du menu
    __Load__: function()
	{

		// On lance le test pour s'assurer du bon fonctionnement
        o.Menu.__Test__();

    },

	// Test d'existence des méthodes et de la syntaxe xhtml
    __Test__: function()
	{

		// Si l'une des méthodes du script n'est pas interprétée ou si le menu n'existe pas, on stoppe le script.
        if ( !d.getElementById ||
		     !d.getElementsByTagName ||
		     !d.createElement ||
		     !d.createTextNode ||
		     !d.getElementById('menu') ||
		     !d.getElementById('menu').setAttribute ||
		     !d.getElementById('menu').replaceChild ||
		     !d.getElementById('menu').appendChild ||
		     !d.getElementById('menu').getElementsByTagName('dl') ) return false;

/*
		----- Tests facultatifs et non exhaustifs de bon augure ^^ -----
		----- Les codes contenus dans la zone suivante peuvent     -----
		----- être virés si vous êtes sûr de votre syntaxe xhtml.  -----
*/

		// Une fois le premier test effectué, on définit les variables nécessaires.
		var iA, iB, iC, iD,
			oMenu = d.getElementById('menu'),
			oDl = oMenu.getElementsByTagName('dl');

		// Pour chaque élément dl du tableau oDl,
		for ( iA = oDl.length - 1; iA >= 0; iA-- )
		{
			// on récupère les éléments dt dans un tableau.
			var oDt = oDl[iA].getElementsByTagName('dt');
			// Si le tableau oDt est vide, on stoppe le script.
			if ( !oDt ) return false;
		}
		
		// Pour chaque élément dl du tableau oDl,
		for ( iA = oDl.length - 1; iA >= 0; iA-- )
		{
			// on récupère les éléments dd dans un tableau oDd.
			var oDd = oDl[iA].getElementsByTagName('dd');
			// Si le tableau oDd est vide, on stoppe le script.
			if ( !oDd ) return false;
			// sinon
			else
			{
				// pour chaque élément dd du tableau oDd,
				for ( iB = oDd.length - 1; iB >= 0; iB-- )
				{
					// on récupère les éléments ul dans un tableau oUl.
					var oUl=oDd[iB].getElementsByTagName('ul');
					// S'il n'y a pas d'élément ul, on stoppe le script.
					if( !oUl ) return false;
					// sinon
					else
					{
						// pour chaque élément ul du tableau oUl,
						for ( iC = oUl.length - 1; iC >= 0; iC-- )
						{
							// on récupère les éléments li dans un tableau oLi.
							var oLi = oUl[iC].getElementsByTagName('li');
							// S'il n'y a aucun objet oLi, on stoppe le script.
							if( !oLi ) return false;
							// sinon
							else
							{
								// pour chaque élément li du tableau oLi,
								for ( iD = oLi.length - 1; iD >= 0; iD-- )
								{
									// on récupère l'élément a dans un objet oA.
									var oA = oLi[iD].getElementsByTagName('a')[0];
									// S'il n'y a pas d'objet oA, on stoppe le script.
									if( !oA ) return false;
								}
							}
						}
					}
				}
			}
		}
		
/*
		-----                                            -----
		----- Fin des tests facultatifs de bon augure ^^ -----
		-----                                            -----
*/

		// Une fois le test effectué, on initialise le menu.
		return o.Menu.__Init__();

	},

	// Méthode d'initialisation du menu
	__Init__:function()
	{

		// On définit les variables nécessaires.
        var iA,
			oMenu = d.getElementById('menu'),
			oDl = oMenu.getElementsByTagName('dl');

		// On cache tous les éléments dd en lançant la méthode dédiée à cette tâche.
        o.Menu.__HideLists__();

		// Pour chaque élément dl du tableau oDl,
        for ( iA = oDl.length - 1; iA >= 0; iA-- )
        {
			// On récupère l'élément dt.
            var oDt = oDl[iA].getElementsByTagName('dt')[0];
			// On crée un élément dt et un élément a
			var oNewDt = d.createElement('dt'),
				oA = d.createElement('a'),
				oTextA = d.createTextNode('');

			// On définit les propriétés de l'objet oA
			// (récupération du noeud texte de l'élément dt pour définir celui de l'élément a)
			oA.setAttribute('href','#');
            oTextA.data = oDt.firstChild.nodeValue;

			// On constitue l'arbre DOM en remplaçant l'élément dt du code xhtml
			// par celui qu'on vient de créer.
            oA.appendChild(oTextA);
            oNewDt.appendChild(oA);
            oDl[iA].replaceChild(oNewDt,oDt);

			// On définit des méthodes en fonction des actions de l'utilisateur.
			oA.onclick = o.Menu.__Discard__;
            oDl[iA].onmouseover = o.Menu.__MouseDisplay__;
            oA.onfocus = o.Menu.__TabDisplay__;
			oA.onkeypress = o.Menu.__TabDisplay__;
        }

    },

	// Méthode d'affichage de l'élément dd lorsqu'on le survole.
    __MouseDisplay__:function()
	{

		// On cache tous les éléments dd en lançant la méthode dédiée à cette tâche.
        o.Menu.__HideLists__();

		// On récupère l'élément dd de l'élément dl qu'on survole dans un objet.
        var oDd = this.getElementsByTagName('dd')[0];

		// On affecte la propriété css "display: block;" à l'objet oDd (affichage)
        oDd.style.display = 'block';

		// On cache l'élément dd lorsqu'on ne survole plus l'élément dl.
        this.onmouseout = o.Menu.__HideLists__;

    },

	// Méthode d'affichage de l'élément dd lorsqu'il prend le focus.
    __TabDisplay__:function()
	{

		// On cache tous les éléments dd en lançant la méthode dédiée à cette tâche.
        o.Menu.__HideLists__();

		// On récupère l'élément dd de l'élément dl qui a le focus dans un objet.
        var oDd = this.parentNode.parentNode.getElementsByTagName('dd')[0];

		// On affecte la propriété css "display: block;" à l'objet oDd (affichage)
        oDd.style.display = 'block';

		// On donne le focus au premier lien de l'élément dd traité.
        oDd.getElementsByTagName('a')[0].focus();

    },

	// Méthode de masquage des éléments dd
    __HideLists__:function()
	{

		// On définit les variables nécessaires.
        var iA,
			oDd = d.getElementById('menu').getElementsByTagName('dd');

		// Pour chaque élément dd du tableau oDd,
        for (iA = oDd.length - 1; iA >= 0; iA-- )
		{
			// On affecte la propriété css "display: none;" à l'objet oDd (masquage)
            oDd[iA].style.display = 'none';
		}

    },

	// Fonction d'annulation
    __Discard__:function()
	{

		// On annule l'action.
        return false;

    }

};

// Une fois que le document est chargé en mémoire, on charge le script.
addLoadEvent(o.Menu.__Load__);

sfHover = function() {
	var sfEls = document.getElementById("menu").getElementsByTagName("DL");
	for (var i=0; i<sfEls.length; i++) {
		sfEls[i].onmouseover=function() {
			this.className+=" sfhover";
		}
		sfEls[i].onmouseout=function() {
			this.className=this.className.replace(new RegExp(" sfhover\\b"), "");
		}
	}
}
addLoadEvent(sfHover);
[/i][/i]
Bah c'est comme avant...
Voilà mon HTML :
<div id="menu">
	
	<!-- L'étude Notariale -->
	<dl>
	
		<dt>L'étude Notariale</dt>
		<dd><ul>
			<li class="first"><a href="#">Présentation</a></li>
			<li><a href="#">Les Associés</a></li>
			<li><a href="#">Vos Interlocuteurs</a></li>
		</ul></dd>
	</dl>
	
	
	<!-- Annonces Immobilières -->
	<dl>
		<dt>Annonces Immobilières</dt>
		<dd><ul>
			<li><a href="#">Recherche multi-critères</a></li>
			<li><a href="#">Le service négociation</a></li>
			<li><a href="#">Les frais de négociation</a></li>
			<li><a href="#">Proposer votre bien</a></li>
			<li><a href="#">La région en bref</a></li>
		</ul></dd>
	</dl>
	
	<!-- Profession Notaire -->
	<dl>
		<dt>Profession Notaire</dt>
		<dd><ul>
			<li><a href="#">Qu'est-ce qu'un notaire ?</a></li>
			<li><a href="#">Que fait-il ?</a></li>
			<li><a href="#">Qu'apporte-t-il ?</a></li>
			<li><a href="#">Qui le choisit ?</a></li>
			<li><a href="#">Les Frais d'acte</a></li>
		</ul></dd>
	</dl>
	
	
	<dl>
		<!-- Informations Juridiques -->
		<dt>Informations Juridiques</dt>
		<dd><ul>
			<li><a href="#">Droit de la famille</a></li>
			<li><a href="#">Gestion de patrimoine</a></li>
			<li><a href="#">Droit immobiler</a></li>

		</ul></dd>
	
	</dl>
<script type="text/javascript">
var oDd=document.getElementsByTagName('dd'),i=oDd.length-1;for(i;i>=0;i=i-1)oDd[i].style.display='none';
</script>		
</div> <!-- Fin Menu Top -->
[/i]
merci !!
Vous allez me trouver boulet mais j'y comprends rien !!
J'ai l'impression que le problème ne vient pas seulment du onload, mais aussi de fait que je "travaille" finalement sur les mêmes choses (à savoir les propriétés des dl:hover.
Bonjour,

Tiens, je vais radoter un peu Smiley cligne

C'est une illustration très parlante du problème des "templates", "gabarits" et autres "scripts" prêts à l'emploi, d'alsa ou d'ailleurs.

L'alternative actuelle est:
- diffuser des modèles isolés, qui seront conflictuels, ou inadaptables dans les cas concrets. Ils s'adressent en effet surtout à ceux qui n'ont pas les compétences nécessaires pour les adapter, et donc les utiliser.
- ou diffuser des "librairies" complètes, surmontant ce problème au prix de quelques centaines de Ko de code inutile pour la plupart des usagers, qui mobiliseront sans le savoir un porte-avion nucléaire pour traverser le ruisseau local.

Entre les deux, il est bien difficile de réaliser un ensemble de scripts/templates modulaires et ouverts Smiley cligne (soyons sérieux: personne ne sait le faire à l'heure actuelle, et d'autres pistes sont plus prometteuses)

Pour être plus concret, kristof: alléger, alléger et encore alléger ! Chaque script récupéré pour faire un effet mineur est une source de problème à cette échelle... Qu'est-ce qui est important: développer ton contenu, ou les :hover ? Smiley cligne
Modifié par Laurent Denis (07 Aug 2006 - 14:51)
Tout à fait, tes deux scripts modifient l'évènement onmouseover des dl donc ... souci !

j'ai modifié le code d'un des script pour qu'il intègre le comportement de l'autre (voir fonction __MouseDisplay__)


// Raccourci et création d'un objet
var d = document,
	o = {};
	
// Définition des propriétés de l'objet
o.Menu =
{
	// Chargement du menu
    __Load__: function()
	{
		// On lance le test pour s'assurer du bon fonctionnement
        o.Menu.__Test__();
    },

	// Test d'existence des méthodes et de la syntaxe xhtml
    __Test__: function()
	{
		// Si l'une des méthodes du script n'est pas interprétée ou si le menu n'existe pas, on stoppe le script.
        if ( !d.getElementById ||
		     !d.getElementsByTagName ||
		     !d.createElement ||
		     !d.createTextNode ||
		     !d.getElementById('menu') ||
		     !d.getElementById('menu').setAttribute ||
		     !d.getElementById('menu').replaceChild ||
		     !d.getElementById('menu').appendChild ||
		     !d.getElementById('menu').getElementsByTagName('dl') ) return false;

// Une fois le premier test effectué, on définit les variables nécessaires.
		var iA, iB, iC, iD,
			oMenu = d.getElementById('menu'),
			oDl = oMenu.getElementsByTagName('dl');

		// Pour chaque élément dl du tableau oDl,
		for ( iA = oDl.length - 1; iA >= 0; iA-- )
		{
			// on récupère les éléments dt dans un tableau.
			var oDt = oDl[iA].getElementsByTagName('dt');

			// Si le tableau oDt est vide, on stoppe le script.
			if ( !oDt ) return false;
		}

		// Pour chaque élément dl du tableau oDl,
		for ( iA = oDl.length - 1; iA >= 0; iA-- )
		{
			// on récupère les éléments dd dans un tableau oDd.
			var oDd = oDl[iA].getElementsByTagName('dd');
			// Si le tableau oDd est vide, on stoppe le script.
			if ( !oDd ) return false;
			// sinon
			else
			{
				// pour chaque élément dd du tableau oDd,
				for ( iB = oDd.length - 1; iB >= 0; iB-- )
				{
					// on récupère les éléments ul dans un tableau oUl.
					var oUl=oDd[iB].getElementsByTagName('ul');

					// S'il n'y a pas d'élément ul, on stoppe le script.
					if( !oUl ) return false;
					// sinon
					else
					{
						// pour chaque élément ul du tableau oUl,
						for ( iC = oUl.length - 1; iC >= 0; iC-- )
						{
							// on récupère les éléments li dans un tableau oLi.
							var oLi = oUl[iC].getElementsByTagName('li');
							// S'il n'y a aucun objet oLi, on stoppe le script.
							if( !oLi ) return false;
							// sinon
							else
							{
								// pour chaque élément li du tableau oLi,
								for ( iD = oLi.length - 1; iD >= 0; iD-- )
								{
									// on récupère l'élément a dans un objet oA.
									var oA = oLi[iD].getElementsByTagName('a')[0];

									// S'il n'y a pas d'objet oA, on stoppe le script.
									if( !oA ) return false;
								}
							}
						}
					}
				}
			}
		}

		// Une fois le test effectué, on initialise le menu.
		return o.Menu.__Init__();
	},

	// Méthode d'initialisation du menu
	__Init__:function()
	{
		// On définit les variables nécessaires.
        var iA,
			oMenu = d.getElementById('menu'),
			oDl = oMenu.getElementsByTagName('dl');

		// On cache tous les éléments dd en lançant la méthode dédiée à cette tâche.
        o.Menu.__HideLists__();

		// Pour chaque élément dl du tableau oDl,
        for ( iA = oDl.length - 1; iA >= 0; iA-- )
        {
			// On récupère l'élément dt.
            var oDt = oDl[iA].getElementsByTagName('dt')[0];
			
			// On crée un élément dt et un élément a
			var oNewDt = d.createElement('dt'),
				oA = d.createElement('a'),
				oTextA = d.createTextNode('');

			// On définit les propriétés de l'objet oA
			// (récupération du noeud texte de l'élément dt pour définir celui de l'élément a)
			oA.setAttribute('href','#');
            oTextA.data = oDt.firstChild.nodeValue;

			// On constitue l'arbre DOM en remplaçant l'élément dt du code xhtml
			// par celui qu'on vient de créer.
            oA.appendChild(oTextA);
            oNewDt.appendChild(oA);
            oDl[iA].replaceChild(oNewDt,oDt);

			// On définit des méthodes en fonction des actions de l'utilisateur.
			oA.onclick = o.Menu.__Discard__;
            oDl[iA].onmouseover = o.Menu.__MouseDisplay__;
            oA.onfocus = o.Menu.__TabDisplay__;
			oA.onkeypress = o.Menu.__TabDisplay__;
        }
    },

	// Méthode d'affichage de l'élément dd lorsqu'on le survole.
    __MouseDisplay__:function()
	{
		// On cache tous les éléments dd en lançant la méthode dédiée à cette tâche.
        o.Menu.__HideLists__();		
		this.className+=" sfhover";
		
		// On récupère l'élément dd de l'élément dl qu'on survole dans un objet.
        var oDd = this.getElementsByTagName('dd')[0];

		// On affecte la propriété css "display: block;" à l'objet oDd (affichage)
        oDd.style.display = 'block';
		
		var oThis = this;
		// On cache l'élément dd lorsqu'on ne survole plus l'élément dl.
        this.onmouseout = function () {o.Menu.__HideLists__(); oThis.className=oThis.className.replace(new RegExp(" sfhover\\b"), "");};
    },



	// Méthode d'affichage de l'élément dd lorsqu'il prend le focus.
    __TabDisplay__:function()
	{
		// On cache tous les éléments dd en lançant la méthode dédiée à cette tâche.
        o.Menu.__HideLists__();
		
		// On récupère l'élément dd de l'élément dl qui a le focus dans un objet.
        var oDd = this.parentNode.parentNode.getElementsByTagName('dd')[0];

		// On affecte la propriété css "display: block;" à l'objet oDd (affichage)
        oDd.style.display = 'block';

		// On donne le focus au premier lien de l'élément dd traité.
        oDd.getElementsByTagName('a')[0].focus();
    },

	// Méthode de masquage des éléments dd
    __HideLists__:function()
	{
		// On définit les variables nécessaires.
        var iA,
			oDd = d.getElementById('menu').getElementsByTagName('dd');
				
		// Pour chaque élément dd du tableau oDd,
        for (iA = oDd.length - 1; iA >= 0; iA-- )		
		{
			// On affecte la propriété css "display: none;" à l'objet oDd (masquage)
            oDd[iA].style.display = 'none';
		}
    },
	// Fonction d'annulation
    __Discard__:function()
	{
		// On annule l'action.
        return false;
    }
};
window.onload = o.Menu.__Load__;


normalement tu n'as plus besoin de la fonction sfHover

dis moi si c'est bien le comportement que tu attendais (parce avec ce code finalement tu te retrouves avec des classes dans tes <dl> qui s'ajoutent au fur et à mesure qu'on survole le dl ... )

a+
Salut Laurent,
C'est vrai, tu as tout à fait raison (comme toujours ?? Smiley ravi ).
Mais c'est parfois difficile de mettre en corélation ses propres compétences (dans mon cas en JS : nulles), la "validation", la prétention de coder en XHTML, les voeux du client, etc etc...
la quadrature du cercle...
Résultat je passe mon AM sur une broutille, un menu déroulant, alors que j'ai fait mon gabarit XHTML/CSS en 1 heure chrono...
Et je te raconte pas le temps que j'ai passé à essayer de dissuader le client de mettre un menu déroulant... Smiley bawling Le client est roi parait-il... Smiley biggol Smiley biggol
Merci encore !!
Smiley smile
Wah merci dunjl Smiley biggrin Smiley biggrin
ça marche !!!
Bravo et encore merci pour le temps que tu m'as consacré...
Promis je vais m'acheter un bon bouquin sur JS et je vous embeterai plus avec mes bricolages. Smiley langue
Modifié par kristof (07 Aug 2006 - 15:02)
a écrit :
ça marche !!!

cool !

a écrit :
Bravo et encore merci pour le temps que tu m'as consacré...

de rien, c'est normal que le nom de classe 'sfHover' s'ajoute à chaque fois qu'on survole le <dl> ?

a écrit :
Promis je vais m'acheter un bon bouquin sur JS

Je te conseille DOM Scripting si tu n'es pas anglophobe ...
Modifié par dunjl (07 Aug 2006 - 15:06)
a écrit :
c'est normal que le nom de classe 'sfHover' s'ajoute à chaque fois qu'on survole le <dl> ?

Bah, j'en sais rien...
En fait sous FF maintenant c'est bizarre le :hover reste même si on n'est plus au survol...
a écrit :
En fait sous FF maintenant c'est bizarre le :hover reste même si on n'est plus au survol...

ce que tu veux, c'est :
classe 'sfHover' quand tu survoles et plus de classe particulière quand tu sors du dl, c'est ca?
Tout à fait !! Smiley biggrin
Mais avec FF pas besoin puisqu'il gère tout seul le dl:hover.
Donc c'est que pour IE normalement, et pour IE ça marche très bien comme c'est là...
Modifié par kristof (07 Aug 2006 - 15:16)
Salut dunjl,
J'ai réussi à faire que ça marche pour tout le monde en modifiant ton code comme ça :
		if (navigator.appName.indexOf("Microsoft") != -1) 
		{ 
				this.className+=" sfhover";
		}

J'espère que c'est correct... Smiley biggol
a écrit :
J'espère que c'est correct...

Ca doit marcher en effet mais la détection de navigateur est tout de même à éviter dans la mesure du possible, notamment de cette manière avec navigator.appName.
Par exemple dans ton cas, tu vérifies que c'est Microsoft mais quelqu'un vient sur ton site avec IE7 beta et le navigateur va executer ton code alors que IE7 gère la pseudo-classe :hover (si je ne m'abuse)
arhh...
Existe-t-il un truc pour dire :
"Si IE6 ou moins", comme on le fait en HTML avec les commentaires conditionnels ??
hi hi...

Rien n'empêche d'inclure un script dans un commentaire conditionnel.

Mais cela n'enlève rien sur le fond: la détection js se fait sur les objets et les méthodes nécessaires à un script, pas sur les identifiants formel du navigateur.
Pages :