Newsgroup: it.comp.lang.javascript
Titolo: domanda cambio style

Ciao,
ho un menu realizzato in questo modo:
  <div class="menu">
     <ul class="menu" >
       <li id="changem"><a title="click download" href="#" 
onClick="change('changem', 'visitato');">Link 1</a></li>
       <li id="changeme"><a title="capitolo I" href="#beatus" 
onClick="change('changeme', 'visitato');">Link 2</a></li>
...
CSS:
ul.menu{list-style-image: url(menu.gif);}
.visitato {list-style-image: url(visitato.gif);}
Tramite questa funzione:
<script language="JavaScript">
function change(id, newClass) {
identity=document.getElementById(id);
identity.className=newClass;
}
</script>
cerco di far accadere quanto segue:
al clic su di un link, l'icona che appare accanto al link cambia.
Ora, vorrei sapere:
ho provato a dare lo stesso id ad ogni <li> ma con risultati atroci.
E' necessario che io dia un id differente per ogni <li> (così funziona)?
E' buona pratica? Ci sono altri modi?
Grazie a tutti,
Portlet

 E' buona pratica? Ci sono altri modi?
E' una buona pratica se devi agganciare un solo elemento. Se invece vuoi
ottenere una tua collection, allora potresti usare l'attributo name che può
essere condiviso tra più elementi e usare getElementsByName (nota Elements
e non Element) e agire su tutti questi in una volta sola (attraverso un
ciclo for).
Spero, nonostante la mia scarsa attenzione di questi giorni, di esserti
stato utile.
-- 
Ro!

 ciclo for).
non so se ho capito:
tu dici qualcosa come:
<li name="pippo"><a href...>link</a></li>
<li name="pippo"><a href...>link</a></li>
dando a tutti lo stesso nome?
Come interverrebbe il ciclo?
Grazie.  :-)

 Come interverrebbe il ciclo?
Rileggendo il tuo post, invece di usare name (che comunque sarebbe troppo
intrusivo, usi codice inutile e non compatibile con XHTML 1.0 Strict e 1.1
- in pratica sto fuso di mio ;) potresti fare:
<script type="text/Javascript">
<!--
window.onload=function()
{
	var
_collection=document.getElementById("lista").getElementsByTagName("li");
	for (var _i=0;_i<_collection.length;_i++)
	{
		_collection[_i].onclick=function()
		{
			this.style.listStyleImage="url('img.gif')";
			// creati la tua img.gif, me racumandi ;)
		};
	}
 
};
//-->
</script>
<ul id="lista">
<li>uno</li>
<li>due</li>
</ul>
Se a te servisse che ad ogni click su un <li> tutti gli altri tornassero
normali, allora onclick dovresti prima modificarli tutti e poi cambiare il
singolo. Sai come fare?
Parti dal mio codice e fai qualche prova, se hai problemi riscrivi pure.
Premettendo comunque che non so se ciò che ti ho scritto incontra la tua
richiesta, fammi sapere (proprio per il motivo di cui sopra ;).
-- 
Ro!

 Parti dal mio codice e fai qualche prova, se hai problemi riscrivi pure.
ti ringrazio, è perfetto ed è esattamente quello che volevo fare.
Non mi serve far tornare tutte le icone allo stato originale perché 
l'idea è soltanto quella di rinforzare il lavoro che da CSS fa già :visited.
Molte grazie   :-)

 Molte grazie   :-)

 nome passato nella funzione!!   :-(((
Eh?!
Posta il codice, magari si può fare qualcosa.
-- 
Ro!

Ciao,
il tuo codice JS:
<!--
window.onload=function()
{
	var 
_collection=document.getElementById("lista").getElementsByTagName("li");
	for (var _i=0;_i<_collection.length;_i++)
		_collection[_i].onclick=function()
		{
			this.style.listStyleImage="url(book.gif)";
		};
	}
//-->
[posizionato nell'head, dopo aver linkato il CSS esterno]
HTML:
<div class="menu">
<ul id="lista" class="UL_MENU">
<li><a title="press 0" href="#" accesskey="0">[0] link1</a></li>
<li><a title="press 1" href="#b" accesskey="1">[1] link2</a></li>
CSS:
ul.UL_MENU{list-style-image: url(menu.gif);}
Nel CSS ci sono varie di queste "estensioni" di ul:
la pagina ha cinque liste differenti, ciascuna con una sua icona accanto.
Cosa succede:
su Firefox nessun problema, anche se pensavo che, poiché la cosa deve 
rinforzare il senso di ":visited", al refresh della pagina o quando ci 
si ritorna, dovrei fare in modo che la pagina mantenga le icona sullo 
stato "link già cliccato", mentre al momento non lo fa (ma forse qui 
serve un cookie).
Su IE sono numeri:
IE sceglie una icona che dice lui (per l'esattezza pdf.gif al posto di 
quella che gli viene indicata, che è book.gif). Se si prova a togliere 
quella icona dalla cartella e a ricaricare, visualizza il bullet di 
default (il pallino nero)...
Grazie per l'attenzione.  :-)
Portlet
Ro! ha scritto:


Come non detto:
l'errore stava in una riga del (lungo) CSS che avevo dimenticato di 
commentare:
/*div.menu ul li a:visited{list-style-image: url(pdf.gif);};*/
Adesso vedo come posso realizzare il cookie, grazie di tutto.
Portlet
