Newsgroup: it.comp.lang.javascript
Titolo: Ciclo for sulle options di una select

Salve a tutti,
Sto leggendo la guida JavaScript del sito w3schools e mi sono
imbattuto in questo banale script che però non funziona. Vorrei capire
il meccanismo per il quale, pur trovando 4 elementi nella Select, il
ciclo for visualizza soltanto il primo. Sembra che si fermi comunque
dopo il primo document.write. Mi piacerebbe capirne il perché.
Testato con IE6. Grazie.
http://www.w3schools.com/js/tryit.asp?filename=try_dom_select_options

 dopo il primo document.write. Mi piacerebbe capirne il perché.
function getOptions()
  {
  var x=document.getElementById("mySelect");
e ok, qua hai recuperato un riferimento all'oggetto select. ricorda: l'id
deve essere univoco nella pagina
  for (i=0;i<x.length;i++)
qua sta l'errore: x.length; non so cosa possa restituire: come dicevo sopra
è univoco e non restituisce un array ... a naso, se usa value come
proprietà predefinita, potrebbe restituire la lunghezza del value, ma la
sto sparando (non ha senso length applicato a un oggetto che non sia una
collection)
qua un po' di semplicissimi esempi sulle select e options:
 
http://www.criosoftware.it/defaultTIselect.aspx
-- 
"qualcuno è andato per età
 qualcuno perchè già dottore
 e insegue una maturità, si è sposato, fa carriera
 ed è una morte un po' peggiore"
									    F.G.

 collection)
Non e' qui il problema: seppur teoricamente scorretto (e non chiedermi
perche' non fanno x.options.length, visto che il for scorre proprio le
options) ritorna il valore giusto (in questo caso 4).

 options)
Beh, non è tecnicamente scorretto, fa parte delle specifiche. Diciamo
che spesso si preferisce riferirsi a "options" perché è su quella che
poi si lavora: in quei casi spesso non mantengo neppure alcun tipo di
riferimento alla select. Qualcosa tipo:
	var opts = document.getElementById("mysel").options;
	for (var i=0;i<opts.length;i++)
		alert(opts[i].value); 
Tornando allo script, questo visualizza solo la prima "option" per un
semplice motivo: utilizzando document.write dopo che la pagina ha già
completato il caricamento, la "sovrascrive". Quindi eseguito il primo
step del ciclo, lo script non è più presente in memoria perché IE gli
ha dato un bel colpo di spugna e ha cancellato ogni bene.
-- 
~ Se i sintomi persistono, insultare il medico.


Il concetto di fondo comunque, è che document.write va a scrivere nel
buffer di output del documento. Ora, se questo non è ancora stato del
tutto chiuso, il testo passato come parametro viene accodato. Invece,
se è stato chiuso - ovvero, la pagina è stata finita di caricare - ne
viene aperto uno nuovo in cui scrivere.
La conseguenza è che la pagina corrente viene "cancellata". In quello
script, quindi, dopo la prima chiamata a document.write, il codice JS
viene eliminato e IE6 non sa più cosa chiamare.
E difatti, genera un errore se ci fai caso.



Il concetto di fondo comunque, è che document.write va a scrivere nel
buffer di output del documento. Ora, se questo non è ancora stato del
tutto chiuso, il testo passato come parametro viene accodato. Invece,
se è stato chiuso - ovvero la pagina ha completato il suo caricamento
- ne viene aperto uno nuovo in cui scrivere.
La conseguenza è che la pagina corrente viene "cancellata": In quello
script, quindi, dopo la prima chiamata a document.write, il codice JS
viene eliminato e IE6 non sa più a cosa riferirsi, cosa eseguire.
