Pages :
bonjour
j'utilise le menu accordéon du tuto de ce portail et ceci dans plusieurs page

un menu = 1 page = une rubrique ou sous rub

je voudrais que lorsque je clic par exemple sur la sous rub2 la page suivante s'ouvre en laissant le menu déroulé à sous rub 2

je ne sais pas si je suis tres claire dans mes propos

en l'état, lorsque je clic sous sousrub2, la page contenant sous rub2 s'ouvre mais son menu lui se ré affiche fermé, je voudrais qu'il reste ouvert comme juste avant
ha exact sorry

je tente de le placer ici par exemple en ayant pris le soin de modifier la script et pourtant ça se charge fermé


<ul class="navigation">
      <li class="toggleSubMenu"><span>Mariage</span>
          <ul class="subMenu">
            <li><a href="photographe-mariage-preparatifs.html">Préparatifs</a></li>
            <li><a href="photographe-mariage-couple.html">Couple</a></li><li><a href="photographe-mariage-ceremonies.html" class="open_at_load">Cérémonies</a></li>


// On cache les sous-menus :
    // sauf celui qui porte la classe "open_at_load" :
    $(".navigation ul.subMenu:not('.open_at_load')").hide();

je dois faire du grand n'importe quoi
ha oui c'est nettement mieux
seulement ça passe par deux contraintes pour le moment:
-je clic pour dérouler une autre rub celle ouverte ne se referme pas
- au chargement de l apage le menu de déroule entièrement avant des se placer comme voulu
sokebana a écrit :
-je clic pour dérouler une autre rub celle ouverte ne se referme pas


Il ne faut pas oublier d'enlever le open_at_load

sokebana a écrit :
- au chargement de l apage le menu de déroule entièrement avant des se placer comme voulu


ça c'est normal
Laurie-Anne a écrit :
ça c'est normal


Il y a moyen d'éviter ce comportement en ajoutant une classe sur l'élément <html>. Voir ce sujet et en particulier les propositions de correction de Florent.
je pense que cela réside dans cette info de florent?
a écrit :
2. Le $("html").addClass("hasJS"); n'est pas optimal. Son rôle est d'éviter l'affichage de contenus à masquer (via JavaScript) lors du chargement des bibliothèques et scripts JS. Le faire dépendre du chargement de jQuery, c'est un peu limite. Il faudrait plutôt utiliser document.documentElement.className+="hasJS";, à placer dans le HEAD en dehors de tout $(document).ready() et avant de charger les bibliothèque et scripts JS (que tu peux charger en fin de document plutôt que dans le HEAD, d'ailleurs).

seulement cela devient trop compliqué pour moi...
ho bin dis donc cette proposition me séduit tu t'en doutes bien!
elle résoudrait l'éccart différents entre les sous rub* et le déroulage complet et renroulage (?)?

* lorsque je mets le code <ul class="open_at_load">, cela me crée un éccart entre les lignes qu'il n'est pas dans le reste du menu

par avance un grand merci de ton aide
si tu veux, dis moi les éléments dont tuas besoin
Voilà le code :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
	<title>Menu accordéon sans ouverture au chargement de la page</title>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<style type="text/css" media="screen">
		#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(http://www.alsacreations.com/xmedia/tuto/exemples/accordeon/menu-item.png) left bottom no-repeat;
			}
		#navigation .toggleSubMenu a, #navigation .toggleSubMenu span {
			background-image: url(http://www.alsacreations.com/xmedia/tuto/exemples/accordeon/menu-item-deroule.png);
			}
		#navigation .open a, #navigation .open span {
			background-image: url(http://www.alsacreations.com/xmedia/tuto/exemples/accordeon/menu-item-enroule.png);
			}
		#navigation a:hover, #navigation a:focus, #navigation a:active {
			text-decoration: underline;
			}
		#navigation .subMenu {
			font-size: .8em;
			background: #ccc url(http://www.alsacreations.com/xmedia/tuto/exemples/accordeon/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;
			}
		.hasJS #navigation ul.subMenu {display: none;}
		.hasJS #navigation ul.open_at_load, .hasJS #navigation ul.open {display: block;}
	</style>
	<!--[if lte IE 6]>
	<style type="text/css">
		#navigation li {
			height: 1px;
			}
	</style>
	<![endif]-->
	<script type="text/javascript">
		document.documentElement.className+=" hasJS";
	</script>
</head>

<body>
    <ul id="navigation">
        <li><a href="" title="">Item 1</a></li>
        <li class="toggleSubMenu"><span>Item 2</span>
            <ul class="subMenu open_at_load">
                <li><a href="" title="">Item 2.1</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="" title="">Item 3.2</a></li>

            </ul>
        </li>
        <li><a href="" title="">Item 4</a></li>
    </ul>    
	<script type="text/javascript" src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js"></script>
	<script type="text/javascript">
		<!--
			$(document).ready( function () {
				// On cache les sous-menus
				// sauf celui qui porte la classe "open_at_load" :
				//$(".navigation 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&#039;ils contiennent par un lien :
				$("#navigation 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" :
				$("#navigation 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 {
						$("#navigation 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>
</body>
</html>





Note que ce n'est pas tout à fait accessible à cause des display:none.
Modifié par Patidou (24 Mar 2009 - 12:05)
Le code intégré dans la page (css et javascript avant la fin du body) sera avantageusement placé dans des fichiers externes. Smiley cligne
Modifié par Patidou (24 Mar 2009 - 11:07)
hello

bon l apartie css à mettre sur la feuille css ok ça je sais faire

actuellement mon script est ds la haed, tu m'invite à le mettre sur une feuille indépendante, peux tu m'en dir un peu plus stp?

en attendant un grand merci pr le temps que tu m'as accordé.

je teste d'ici 15mn
Tu copie le code javascript (sans les commentaires <!-- et -->) dans un fichier externe que tu nomme, par exemple, accordeon.js. Et donc la fin de ton code html ressemblera à ça :

    </ul>    
	<script type="text/javascript" src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js"></script>
	<script type="text/javascript" src="accordeon.js"></script>
</body>
</html>


Les fichiers javascript se mettent dans le cache du navigateur comme les fichiers css et ne sont pas rechargés si on arrive sur une autre page qui y fait appel. Tes visiteurs et ton hébergeur te remercieront. Smiley cligne

En plus c'est plus facile pour la maintenance : un seul fichier à corriger qui impacte plusieurs pages. Smiley cligne
Modifié par Patidou (24 Mar 2009 - 14:21)
alors..

pour l'heure j'ai mis le css sur la page.css et le script ds la head à la place de l'ancien

j'observe:

- le menu lorsqu'il se déroule décale tout mon bas de page, (il ne se déroule pas QUE sans la cellule, il embarque tout)
- mes flash n'apparaissent plus
oups j'ai dis 2 grosses betises, ça semble tout bon

je vais appliquer le déplacement du js comme tu viens de me l'indiquer et je reviens vers toi te confirmer, ça semble impec Smiley lol
Bonjour à tous,
Désirant modifier un menu horizontal en vertical, j'ai trouvé la rubrique consacrée au menu "accordéon" de J.Query qui me va très bien.
J'ai put intégrer mes boutons et cela fonctionne PRESQUE parfaitement !!!
j'ai une fenètre qui s'ouvre au centre de l'écran avec quelques commentaires. ça fonctionne à part un petit détail, les textes correspondants aux sous-menus s'affichent en même temps, seule la couleur du texte change au survol du bouton correspondant.
Est-ce qu'il est possible de n'afficher que le texte du bouton survolé.
j'ai essayé de bricoler un peu, mais je dois dire que je suis nul en java (c'est pas bien, je sais, mais à 70 ans, je n'ai plus la possibilité de me perfectionner. J'ai réussi à intégrer les CSS, mais j'ai atteint le seuil de Peter.) et il n'est pas envisageable que je puisse modifier le code java, je ne comprend absolument pas la syntaxe.

Merci d'avance de vos conseils

le résultat est visible à
http://www.granges-sur-baume.fr/foyer-rural/granges_foyer.html
je ne sais pas ce qui ne vas pas
si le test fonctionne en copiant collant ton code complet sur une page lambda
dès que j'intègre par copier coller ds ma page, l'item 3 ne se déroule pas

en somme:
ds le 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(http://www.alsacreations.com/xmedia/tuto/exemples/accordeon/menu-item.png) left bottom no-repeat;

			}

		#navigation .toggleSubMenu a, #navigation .toggleSubMenu span {

			background-image: url(http://www.alsacreations.com/xmedia/tuto/exemples/accordeon/menu-item-deroule.png);

			}

		#navigation .open a, #navigation .open span {

			background-image: url(http://www.alsacreations.com/xmedia/tuto/exemples/accordeon/menu-item-enroule.png);

			}

		#navigation a:hover, #navigation a:focus, #navigation a:active {

			text-decoration: underline;

			}

		#navigation .subMenu {

			font-size: .8em;

			background: #ccc url(http://www.alsacreations.com/xmedia/tuto/exemples/accordeon/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;

			}

		.hasJS #navigation ul.subMenu {display: none;}

		.hasJS #navigation ul.open_at_load, .hasJS #navigation ul.open {display: block;}



dans la head:

<link href="style.css" rel="stylesheet" type="text/css">
<script src="Scripts/AC_RunActiveContent.js" type="text/javascript"></script>
<!--[if lte IE 6]>
	<style type="text/css">
		#navigation li {
			height: 1px;
			}
	</style>
	<! endif -->
	<script type="text/javascript">
		document.documentElement.className+=" hasJS";
	</script>
<script type="text/javascript" src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js"></script>
<script type="text/javascript" src="accordeon.js"></script>
</head>


DAns le body:
<td>   <ul id="navigation">
        <li><a href="" title="">Item 1</a></li>
        <li class="toggleSubMenu"><span>Item 2</span>
            <ul class="subMenu open_at_load">
                <li><a href="" title="">Item 2.1</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="" title="">Item 3.2</a></li>
            </ul>
        </li>
        <li><a href="" title="">Item 4</a></li>
    </ul>    
  


et le .js:
<script type="text/javascript">


			$(document).ready( function () {


				$("#navigation li.toggleSubMenu span").each( function () {


					var TexteSpan = $(this).text();

					$(this).replaceWith('<a href="" title="Afficher le sous-menu">' + TexteSpan + '<\/a>') ;

				} ) ;

			


				$("#navigation li.toggleSubMenu > a").click( function () {


					if ($(this).next("ul.subMenu:visible").length != 0) {

						$(this).next("ul.subMenu").slideUp("normal", function () { $(this).parent().removeClass("open") } );

					}


					else {

						$("#navigation ul.subMenu").slideUp("normal", function () { $(this).parent().removeClass("open") });

						$(this).next("ul.subMenu").slideDown("normal", function () { $(this).parent().addClass("open") } );

					}


					return false;

				});



qu'est ce que je na fais pas correctement??
Pages :