Newsgroup: it.comp.lang.javascript
Titolo: Menu a comparsa, si resetta ogni volta che aggiorno la pagina

Sto creando un sito per un negozio usando apache-wicket lato server.
ho diviso la pagina web con i div.
Vi posto il sito non per fare pubblicita' ma per semplicita':
http://www.sacredspirit.it/
ho creato un menu sulla sinistra con le varie categorie di prodotti.
Con javascript ho fatto in modo da aprire e chiudere solo il sottomenu che 
interessa.
Solo che ogni volta che si seleziona un sottomenu mi chiude tutto.
Probabilmente perche' viene caricata un'altra pagina che ha lo stesso menu
copiato uguale, e quindi non mantiene lo stato.
Ma anche se ricarico la pagine succede la stessa cosa.
Sotto vi riporto il codice javascript che ho usato.
Poi navigando su google per trovare una soluzione, ho appreso che con 
jquery, avrei fatto il menu molto piu' velocemente con un semplice .toggle()
e magari ci potevo mettere anche qualche effetto di slide.
Ma penso che mi sarebbe rimasto sempre lo stesso problema della persistenza, 
giusto?
Come posso risolverlo? Mica devo gestire la sessione per uno stupido menu?
Stavo pensando che usando i tanto odiati frames, che a me piacciono tanto 
invece, il problema non ci sarebbe stato, visto che non si sarebbe 
ricaricato il menu. C'e' qualche altro sistema con i CSS o simile, per 
creare la pagina sempre divisa in sezioni, header (sopra), menu (a sinista) 
e contenuto (a destra) che mi risolva il problema?
grazie
<script type="text/javascript" language="Javascript">
		<!-- 
		function mostraMenu(menuCorrente) {
			if (document.getElementById) {
				questoMenu = 
document.getElementById(menuCorrente).style
				if (questoMenu.display == 
"block") {
					questoMenu.display = 
"none"
				}
				else {
					questoMenu.display = 
"block"
				}
				return false
			}
			else {
				return true
			}
		}
 -->
	</script>
	<!-- Fine Sezione JavaScript -->
</head>
<body>
...
<h3><a href="
http://www.sacredspirit.it
" onclick="return 
mostraMenu(&#39;bomboniere&#39;)">BOMBONIERE</a></h3>
<div class="sottomenu" id="bomboniere" style="display: none; ">
     <a href="
http://www.sacredspirit.it
" onclick="return 
mostraMenu(&#39;battesimo&#39;)">Battesimo</a>
     <div class="sottomenu" id="battesimo" style="display: none; ">
	    <a wicket:id="bbtaa" href="#">Argento Arde'</a><br/>
		<a wicket:id="bbtae" href="#">Argento L’Arte 
dell’Eleganza</a><br/>
		<a wicket:id="bbtag" href="#">Argento Gbg</a><br/>
		<a wicket:id="bbtas" href="#">Argento 
Stilarte</a><br/>
		<a wicket:id="bbtaw" href="#">Argento Walt Disney - 
Warner Bros</a><br/>
Estratto del CSS:
=================
html,body{margin:0; padding: 0}
body {
.......
div#container{ /*nessuna regola necessaria*/ }
div#header {
	width: 100%;
	height: 205px;
 
}
h1 {
	display: none;
}
.sottomenu {
	display:block; margin-left:20px;
}
 
div#menu {
	float: left;
	width: 19em;
	clear: left;
} div#cart {
	margin-right: 19em;
	overflow:hidden;
}

 menu (a sinista) e contenuto (a destra) che mi risolva il problema?
No, devi farlo server-side, ma sarà 1 riga di codice ... come dicevo 
sopra, basta settare display:block alle voci che vuoi che siano 
visualizzate all'inizio. Come? dipende da cosa usi server-side. Comunque 
javascript non c'entra nulla.

 javascript non c'entra nulla.
Ok, server-side mi secca implementarlo.
Preferisco usare i frames.
C'e' qualche alternativa ai frames, che pero' non mi ricarica la parte del 
menu di sinistra?
Con una tabella sarebbe buono?
Grazie

 Con una tabella sarebbe buono?
no. se carichi dal server, carichi per forza una pagina.
Oppure puoi rifare tutto il sito con "ajax", in tal caso caricherai ciò 
che richiami con l'anchor e costruirai la pagina client-side con 
javascript.
Se sviluppi per caso non per IE, il tag object è il "sostituito" dei 
frames:
 
http://www.w3.org/TR/html4/struct/objects.html#edef-OBJECT
(vedi attributi data e type)

 (vedi attributi data e type)
Scusami, non ho capito. Con Object potrei includere del codice html (ad es. 
il menu) nella mia pagina html, ma alla fine verrebbe sempre ricaricata 
tutta la pagina. 

 Come posso risolverlo? Mica devo gestire la sessione per uno stupido menu?
In alternativa a una soluzione lato server e per restare in ambito 
JavaScript, potresti memorizzare l'id del menù attivo in un cookie e 
caricarlo al load.
Prova a dare un'occhiata qui:
http://www.gosu.pl/menu/demo/DynamicTree/example2.html
(hint: cerca cookie nel file DynamicTreeBuilder.js)

 ricaricata tutta la pagina.
No, potresti usarlo come "iframe" per visualizzare il prodotto senza 
ricaricare la pagina cambiando solo l'attributo "data".

 non supporta l'uso del tag object in questo modo, purtroppo.
ah, ok grazie. Il sito va su internet, quindi deve essere compatibile con 
almeno il 95%  dei browser usati.
Grazie.

Pablo wrote:

A me non mantiene lo stato se ricarico la pagina.
Nemmeno di Features: View/Hide 
Mentre dallo stesso sito ho trovato un ottimo menu che funziona:
http://www.gosu.pl/menu/demo/BarMenu/example2.html
Non non pratico di js, ma che dici si puo' trasformare a tre livelli invece 
che 2?
Poi grazie al tuo suggerimento di usare i cookies ho trovato su google 
questo tree menu che usa jquery.
http://www.dynamicdrive.com/dynamicindex1/treeview/index.htm
 e penso proprio di usare quello senza linee
http://jquery.bassistance.de/treeview/demo/simple.html
Grazie per l'illuminazione!

 
Riguardando meglio, questo menu e' quello che mi piace di piu', anche se 
referisco jquery a js per semplicita'.
Questo menu lo preferisco perche' usa delle immagini come bottoni per le 
voci principali dei menu. Si puo' aggiungere un sottolivello?


 voci principali dei menu. Si puo' aggiungere un sottolivello?
Sì, anche se bisogna lavorarci un po'.
Più che altro mi chiederei se ne vale la pena: usare immagini come 
bottoni (o in generale qualsiasi effetto grafico) riguarda i CSS più che 
JavaScript. Conviene valutare qual è il menù più adeguato, in termini di 
funzionalità, per le proprie esigenze e successivamente modificarne 
l'aspetto grafico.

 server-side, ne tantomeno di C#
Mi spiace, ma non saprei come altro aiutarti, sentiamo gli altri; se sono 
poche voci magari la logica del cookie può esserti utile:
 - registri il cookie della categoria di cui aprire il tree
 - window.onload ti leggi il cookie e setti display:block alla root del 
tree