11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour,
N'y connaissant rien de rien en javascript, j'ai récupéré un p'tit code, permettant à mon menu déroulant de marcher correctement sur IE 6.

Le voici :
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';}
}


Or, le sous menu apparait bien au survol des rubriques principales, mais rien n'a été prévu pour qu'il soit à nouveau caché quand le curseur s'en éloigne.
Pourriez vous me dire quoi mettre pour que ce soit le cas ?

Merci infiniment.

PS : j'aurais peut-être du être plus précis. Voici une partie du code html de mon menu :
<dl>			
		<dt class="menu_actu"  onmouseover="javascript:montre('smenu1');"><a href="#">Actu</a></dt>
			<dd id="smenu1">
				<ul>
				   <li><a href="#">Tout sur PP</a></li>
		            <li><a href="#">Les RDV avec PP</a></li>
					<li><a href="#">Infos Groupe</a></li>
                    <li><a href="#">PP dans la presse</a></li>
				</ul>
			</dd>
  </dl>

Modifié par Ralf (18 Mar 2009 - 10:06)
Avec ta solution j'obtiens ça (la protection d'IE) :

upload/15709-menujquery.jpg

ce qui n'est pas le cas avec mon menu actuel.

De plus je me vois mal tout recommencer, j'ai juste besoin d'une fonction supplémentaire : que mes sous-rubriques disparaissent quand on arrête de les survoler.

Merci.
C'est juste que IE n'accepte pas les javascript en local (c:\...), à ta place j'installerais wamp ou easy php, tu n'auras plus ces messages. Smiley cligne
Faut faire une demande au service informatique ou baisser le niveau de sécurité de IE (en n'oubliant pas de le remettre avant d'aller sûr le web).
Bonjour Ralf,

J'ai repris ton script comme ceci :
J'ajoute une fonction cache(id) qui fait l'inverse de l'autre.
<script language = 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';}
}

function cache(id){
document.getElementById(id).style.display='none';	
}
</script>


et ton fichier htm comme ceci :
On ajoute la fonction montre('smenu1') avec l'évènement onmouseover à l'élément <dd> (sinon, le menu se masque dès que tu quittes l'élément<dt>) et on ajoute également la fonction cache(this.id) avec l'évènement onmouseout.
<dl>			
	<dt class="menu_actu"  onmouseover="javascript:montre('smenu1');"><a href="#">Actu</a></dt>
		<dd id="smenu1" onmouseover = "javascript:montre('smenu1');" onmouseout = "javascript:cache(this.id)">
			<ul>
			<li><a href="#">Tout sur PP</a></li>
		        <li><a href="#">Les RDV avec PP</a></li>
			<li><a href="#">Infos Groupe</a></li>
                        <li><a href="#">PP dans la presse</a></li>
			</ul>
		</dd>
</dl>

Chez moi, ca marche nickel. Smiley cligne
sylvaindelepierre a écrit :

Chez moi, ca marche nickel. Smiley cligne


Je veux bien le croire mais, ne le prend pas mal, ce n'est accessible ni au clavier ni avec un lecteur d'écran. Smiley cligne

De plus, au niveau sémantique, on ne fait pas un menu avec une liste définition. La solution la plus simple comme dit plus haut c'est jquery et le plugin superfish. Smiley cligne
sylvaindelepierre a écrit :

Chez moi, ca marche nickel. Smiley cligne


Idem chez moi, merci infiniment, c'est exactement ce que je voulais !

Patidou>>>>je comprends ta façon de voir les chose, je suis moi-même assez accroché aux questions de sémantique et d'accessibilité, mais le javascript est un domaine inconnu pour moi, et j'avais juste besoin d'un ptit coup de main en urgence pour dépanner mon menu Smiley smile

Quand j'aurai plus de temps, j'essaierai de me pencher sur ce fameux jquery.
à Ralf >> Heureux de t'avoir dépanné.

à Patidou >> Je suis conscient que les menus dynamiques en JS ne sont franchement pas top au niveau accessibilité. J'en utilise un au bureau depuis 5 ans et je commence à le regretter tellement c'est lourd à gérer et je pense d'ailleurs à l'abandonner. Mais il y en a qui aiment ça...