Bonjour à tous,

Je viens de suivre attentivement le tutoriel pour faire un menu en accordéon.

Mais le problème, c'est qu'il y a une incompatibilité avec IE :
suivez ce lien avec IE puis Firefox, et vous comprendrez !
http://www.oms-stgalmier.com/menu08bis.php

IE laisse des espaces libres !!! Je ne comprends pas !!!

Pouvez-vous m'aider ???

Merci beaucoup pour toute l'aide apportée !

Cordialement,

Anthony
Bonjour,

le problème ne vient pas du menu en lui-même, a priori. Il faudrait commencer par ajouter un DOCTYPE sur la page, histoire de ne pas laisser IE utiliser le mode quirks et faire ce qu'il veut avec les boîtes ...
Et ben ! Chapeau !!

Merci beaucoup !! Ca marche !

Maintenant, un autre petit soucis, j'aimerais que quand je clique sur "Item 2", puis sur ""mon lien", le menu reste ouvert à l'appel de la page.

Voici le code : je pensais que ça allait marcher !

<?
session_start(); // Démarrage de la session
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Office Municipal des Sports de Saint-Galmier</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="keywords"
content="office, Office, municipal, Municipal, sports, sport, OMS, O.M.S., Saint-Galmier, St-Galmier, saint-galmier, st-galmier, saint galmier, Saint Galmier, associations, horaires, manifestations">
<meta name="description"
content="Toutes les informations sur la vie sportive à Saint-Galmier : office municipal des sports, associations, horaires, manifestations, ... Et en plus de nombreux renseignements pour mieux gérer votre association">
<LINK REL="stylesheet" TYPE="text/CSS" HREF="../fichiers/styles.css">

<link rel="stylesheet" href="../fichiers/typographie.css" type="text/css">

<link rel="stylesheet" href="../fichiers/habillage.css" type="text/css" media="print, projection, screen, tv">

<link rel="alternate" type="application/rss+xml" title="<:syndiquer_site:>" href="backend.php3">

	<style type="text/css">
		#navigation {
			margin: 0;
			padding: 0;
			list-style: none:
			background: #000;
			color: #fff;
			width: 200px;
			font: 1.2em "Trebuchet MS", sans-serif;
			}
		#navigation a, #navigation span {
			display: block;
			padding: 4px 10px;
			color: #fff;
			text-decoration: none;
			background: #000 url(menu-item.png) left bottom no-repeat;
			}
		#navigation .toggleSubMenu a, #navigation .toggleSubMenu span {
			background-image: url(menu-item-deroule.png);
			}
		#navigation .open a, #navigation .open span {
			background-image: url(menu-item-enroule.png);
			}
		#navigation a:hover, #navigation a:focus, #navigation a:active {
			text-decoration: underline;
			}
		#navigation .subMenu {
			font-size: .8em;
			background: #ccc url(subMenu.png) 0 0 repeat-x;
			font-size: .9em;
			margin: 0;
			padding: 0;
			border-bottom: 1px solid #666;
			}
		#navigation ul.subMenu a {
			background: none;
			padding: 3px 20px;
			}
	</style>
	<!--[if lte IE 6]>
	<style type="text/css">
		li {
			height: 1px;
			}
	</style>
	<![endif]-->
    <script type="text/javascript" src="jquery-1.2.1.js"></script>
<script type="text/javascript">
<!--
$(document).ready( function () {
    // On cache les sous-menus
    // sauf celui qui porte la classe "open_at_load" :
    $("ul.subMenu:not('.open_at_load')").hide();
    // On sélectionne tous les items de liste portant la classe "toggleSubMenu"

    // et on remplace l'élément span qu'ils contiennent par un lien :
    $("li.toggleSubMenu span").each( function () {
        // On stocke le contenu du span :
        var TexteSpan = $(this).text();
        $(this).replaceWith('<a href="" title="Afficher le sous-menu">' + TexteSpan + '<\/a>') ;
    } ) ;

    // On modifie l'évènement "click" sur les liens dans les items de liste
    // qui portent la classe "toggleSubMenu" :
    $("li.toggleSubMenu > a").click( function () {
        // Si le sous-menu était déjà ouvert, on le referme :
        if ($(this).next("ul.subMenu:visible").length != 0) {
            $(this).next("ul.subMenu").slideUp("normal", function () { $(this).parent().removeClass("open") } );
        }
        // Si le sous-menu est caché, on ferme les autres et on l'affiche :
        else {
            $("ul.subMenu").slideUp("normal", function () { $(this).parent().removeClass("open") });
            $(this).next("ul.subMenu").slideDown("normal", function () { $(this).parent().addClass("open") } );
        }
        // On empêche le navigateur de suivre le lien :
        return false;
    });

} ) ;
// -->

</script>

</head>

<body>

<table>
<tr><td>



    <ul id="navigation">
        <li><a href="">Item 1</a></li>
        <li class="toggleSubMenu"><span>Item 2</span>
            <ul class="subMenu">
                <li><a href="http://www.oms-stgalmier.com/menu08bis.php?page=test" class="<?php echo ($_GET['page'] == 'test') ? 'open_at_load' : '' ?>" title="">mon lien</a></li>
                
                <li><a href="#" title="">Item 2.2</a></li>
                <li><a href="#" title="">Item 2.3</a></li>
            </ul>
        </li>
        <li class="toggleSubMenu"><span>Item 3</span>
            <ul class="subMenu">
                <li><a href="#" title="">Item 3.1</a></li>
                <li><a href="#">Item 3.2</a></li>
            </ul>
        </li>
        <li><a href="#">Item 4</a></li>
    </ul>  
</td></tr></table>

</body>
</html>


Et puis, est-ce que je peux aussi appeler une page quand je clique sur Item 2 ?
J'aimerais que ça puisse ouvrir le sous-menu et aussi ouvrir une page. Je ne sais pas si on peut faire ça !

Merci encore, trop sympa !

Cordialement,

Anthony
Modifié par antow42 (19 Jul 2008 - 12:25)
C'est un forum, pas un chat ici, faut être un peu patient pour avoir des réponses Smiley cligne

De plus, ta question a déjà été posée à plusieurs reprises sur le forum, il faudrait faire quelques recherches avant de lancer des appels au secours Smiley lol
Mais c'est ce que j'ai fait, mais bon, je n'y arrive toujours pas ...

Quelqu'un pourrait me dire les fautes qui empêchent la "mémorisation" de la page consultée (voir un peu plus haut : le menu reste ouvert lorsqu'on va sur une page) ? Merci !!!

Merci pour votre aide précieuse !

Cordialement,

Anthony
Pour garder une page ouverte au chargement, il faut utiliser un langage de programmation côté serveur, comme PHP. Est-ce que tu as un tel langage à ta disposition ?
Bonjour,

antow42 a écrit :
Quelqu'un pourrait me dire les fautes qui empêchent la "mémorisation" de la page consultée

Le problème, c'est qu'il n'y a pas de procédé de «mémorisation» en jeu. Lorsque tu charges une nouvelle page, le navigateur web ferme le document web en cours, et charge un document web complètement différent (quant bien même ce deuxième document web utiliserait les même scripts JS, les mêmes feuilles de styles CSS, etc.). Ce deuxième document web peut comporter le même menu avec le même effet «accordéon» en JavaScript, mais il n'y a aucun mécanisme en place, du côté du serveur ou du navigateur, pour que le comportement de l'utilisateur (sur quel en-tête de sous-menu il a cliqué précédemment) soit gardé en mémoire.

Donc pas de magie, et pas de faute qui empêcherait la magie de se produire. Smiley cligne

Ce que tu peux faire, c'est afficher, au chargement de la page, un sous-menu comme ouvert d'emblée. Pour cela, il faut que pour chaque page chargée le code HTML du menu soit légèrement adapté. Pour l'adaptation exacte (ajout d'une classe dans le cas présent), le tutoriel sur le menu accordéon donne tous les détails nécessaires. Pour ce qui est de réaliser cette adaptation dynamiquement... eh bien, ça repose sur tes compétences en programmation PHP (vu qu'en l'occurrence tu utilises PHP). Smiley cligne
Bonjour,

Mais, j'utilise le PHP (voir mon code) !

antow42 a écrit :

<li><a href="http://www.oms-stgalmier.com/menu08bis.php?page=test" class="<?php echo ($_GET['page'] == 'test') ? 'open_at_load' : '' ?>" title="">mon lien</a></li>


Je comprend bien tout ça, mais en mettant une variable page, et en la testant lorsqu'une nouvelle page s'ouvre, normalement, tout devrait fonctionner, nan ?

Merci de vos conseils !
Modifié par antow42 (20 Jul 2008 - 11:55)
antow42 a écrit :
Bonjour,

Mais, j'utilise le PHP (voir mon code) !
Oups, j'avais pas regardé ... Smiley confused

Si tu regardes cette ligne de code javascript:
$(".navigation ul.subMenu:not('.open_at_load')").hide();
En fait, la classe "open_at_load" devrait être placée sur l'élément <ul> qui doit rester ouvert, et pas sur un lien. L'exemple que j'ai donné dans l'autre sujet n'était qu'un ... exemple à adapter au contexte. Vais pas tout faire à votre place non plus, hein Smiley cligne