Newsgroup: it.comp.lang.javascript
Titolo: Popolazione province onChange

Salve a tutti,
    sto cercando di realizzare un box di ricerca con due listbox a discesa 
comprendenti regioni e province: cambiando la provincia dovrebbe cambiare 
anche l'elenco delle regioni presenti nella seconda listbox. Il codice atto 
a fare cio' e' il seguente :
function popola_province(object){
	index_regione = object.options[object.selectedIndex].value;
	obj_lista_province = document.all.provincia;
	if (index_regione == 0) {
		while(obj_lista_province.options.length > 1)
			obj_lista_province.options[1] = null;
	} else {
		lunghezza = obj_lista_province.options.length;
		numero_province = eval("province_nome"+index_regione+".length");
		for (i=0; i<numero_province; i++)
			obj_lista_province.options[i+1] = new 
Option(eval("province_nome"+index_regione+"["+i+"]"),eval("province_id"+index_regione+"["+i+"]"));
		for (i=numero_province; i<lunghezza; i++)
			obj_lista_province.options[numero_province+1] = null;
	}
}    Ho in parte personalizzato per la popolazione per nome. Il problema e' 
che si trattadi un codice obsoleto e, mentre con internet explorer non 
genera nessun problema il suo uso con Firefox ho dei problemi, ossia 
impostando una pagina web con la seguente intestazione:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd
">
<html xmlns="
http://www.w3.org/1999/xhtml
">
si genera l'errore:
document.all has no properties
Mentre se uso soltanto il tag:
<html>
genera soltanto un warning e il tutto funziona correttamente il problema e' 
che con Internet Explorer in tale caso ho una non corretta visualizzazione 
della pagina.
Come posso correggere il javascript e renderlo appetibile anche a Firefox?
Vi ringrazio a tutti e scusate per la completa ignoranza nell'uso dei 
javascript, prima o poi...imparero'!
Leonardo 

 document.all has no properties
http://www.criosoftware.it/default14.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.


Ti ringrazio per l'aiuto ma purtroppo ancora non son riuscito a capire, 
dunque secondo le mie scarse capacita' di javascript quello che dovrebbe 
restituire nel mio caso dovrebbe essere quello che nel documento che mi hai 
indicato e' referenziato alla voce:
TarGet.document.all[id];
Quindi nel mio caso dovrei sostituire direttamente:
obj_lista_province = document.all.provincia;
con:
obj_lista_province = document.all['provincia'];
Mentre con ie tutto funziona regolarmente senza errori, firefox continua a 
non voler popolare le province, posso iniziare a picchiare la testa contro 
il primo spigolo? ):
Grazie comunque per l'aiuto,
Leonardo 

 Ti ringrazio per l'aiuto ma purtroppo ancora non son riuscito a capire, 
document.all č proprietario di Internet Explorer (ovverosia, funziona
*solo* con IE). Al link postato da Cristiano trovi una funzione che ti
permette di ottenere un riferimento a un oggetto che funzioni con tutti i
browsers.
-- 
Nando [?]
Apostolo della Prova

 browsers.
Buongiorno Nando,
    purtroppo pero' non ho capito come utilizzare tale funzione per 
funzionare nel mio caso, dovrei chiamare tale funzione con parmetri 
provincia? Puoi spiegarmi meglio? Purtroppo io e il javascript non ci 
conosciamo proprio );
Grazie comunque per l'help!
Leonardo 

 Grazie comunque per l'help!
Figurati, non c'č di che.


 script. Fammi sapere se non va.
Mi genera l'errore a questa riga:
    lunghezza = obj_lista_province.options.length;
Mentre con internet explorer tutto funziona regolarmente senza errori!
Esistera' mai una soluzione?!?Chissa'...
Leonardo 

 script. Fammi sapere se non va.
confermo (si chiama GetRef, ma meglio rinominarla in getRef così segue le
convenzioni usate da js)
-- 
"Run rabbit run
 dig that hole, forget the sun
 and when at last the work is done
 don't sit down, it's time to dig another one"
									    P.F.

 Esistera' mai una soluzione?!?Chissa'...
direi di sì, il tuo è un problema elementare e comunissimo (se il problema
è solo quello del document.all). Cosa dice (adesso che hai sostituito la
document.all) la console javascript di Firefox?
-- 
"Ho smesso di fumare.
 Vivrò una settimana di più.
 E in quella settimana pioverà a dirotto"
									    W.A.

 la riga sopra è corretta, posta quello che hai fatto
Ecco cosa ho fatto:
- ho riportato il codice della GetRef nel javascript e poi ho fatto questa 
sostituzione:
obj_lista_province = obj_lista_province = GetRef("provincia");
dopodiche' caricando la pagina non ho nessun errore (come sempre!) ma adando 
a modificare la regione ottengo un errore visibile dalla console di 
javascript di firefox alla seguente linea del codice che ho postato nel 
primo post:
    lunghezza = obj_lista_province.options.length;
Nella console di firefox ho questo messaggio:
obj_lista_province has no properties
Spero di avervi dato tutte le info necessarie per capire l'errore e potermi 
aiutare, grazie ancora per l'impegno che ci state mettendo!
Leonardo


 obj_lista_province has no properties
mah ... vuol dire che non ha recuperato il riferimento corretto (sul perché
senza avere del codice è ardua dirlo)
Se cerchi negli esempi su 
criosoftware.it
 la GetRef è utilizzata spesso,
Giusto per esser certi che tu la abbia usata in modo corretto, es.
 
http://www.criosoftware.it/default26.aspx
-- 
"Non sai che ci vuol scienza
 ci vuol costanza
 ad invecchiare senza maturità"
									    F.G.

 senza avere del codice è ardua dirlo)
Il nuovo codice e' questo:
function popola_province(object){
 index_regione = object.options[object.selectedIndex].value;
 obj_lista_province = GetRef("provincia");
 alert(obj_lista_province);
 if (index_regione == 0) {
  while(obj_lista_province.options.length > 1)
   obj_lista_province.options[1] = null;
 } else {
  lunghezza = obj_lista_province.options.length;
  numero_province = eval("province_nome"+index_regione+".length");
  for (i=0; i<numero_province; i++)
   obj_lista_province.options[i+1] = new 
Option(eval("province_nome"+index_regione+"["+i+"]"),eval("province_id"+index_regione+"["+i+"]"));
  for (i=numero_province; i<lunghezza; i++)
   obj_lista_province.options[numero_province+1] = null;
 }
}
Il form che attiva il javascript e' cosi' fatto:
...
<form action="ricerca.php" method="get">
...
<select name="regione" class="campiform" 
onchange="javascript:popola_province(this);">
...
<select name="provincia" class="campiform">
...
Di piu', sinceramente non so cosa fare. Se volete posso mettere a 
disposizione il js per vederlo on line...ditemi se cio' puo' aiutare a 
risolvere questo mistero. Poi attendo un indirizzo a cui inviare una 
bottiglia di buon vino eh! :D
Leonardo 

 <select name="provincia" class="campiform">
non hai l'id ... quindi: a) select ... id="provincia".... b) usi la
sintassi document.forms[0].elements['provincia'] per recuperare un
riferimento all'oggetto col name.
-- 
"Voi abili a tenere sempre un piede qua e uno là
 avrete un avvenire certo in questo mondo qua
 però la dignità
 dove l'avete persa?"
									    V.R.

 riferimento all'oggetto col name.
A che indirizzo mando la bottiglia?
Grazie mille...mitici!!!
Leonardo 

 A che indirizzo mando la bottiglia?
in...@criosoftware.it
, grazie ... :-)
-- 
"Ti sei salvato
 o sei entrato in banca pure tu?"
									    A.V.

 
in...@criosoftware.it
, grazie ... :-)
Posso bere un sorso anch'io, proporzionale al poco che ho fatto? Grazie :)


 Posso bere un sorso anch'io, proporzionale al poco che ho fatto? Grazie :)
Macchetefrega.. io non ho fatto assolutamente nulla, ma se č roba buona mi
aggrego comunque alla bevuta! :D
-- 
~ "When you have eliminated the impossible, whatever remains,
however improbable, must be the truth." (S.H.)

 aggrego comunque alla bevuta! :D
Spudorato scroccone... io almeno cerco una scusa :)


 Spudorato scroccone... io almeno cerco una scusa :)
Va beh, se proprio ci tieni le scuse posso trovarle anche io.. volevo solo
essere onesto. :)


 Posso bere un sorso anch'io, proporzionale al poco che ho fatto? Grazie :)
ok, ti inoltro un dl non appena mi arriva...
-- 
"Affacciati affacciati benedici, guardaci
 guardaci...guardaci!
 Tanto sono quasi duemila anni che stai a guardare!"
									    E.B.

 aggrego comunque alla bevuta! :D
eccolo lo scroccone di turno! :-)
Assaggio e vi faccio sapere...


 essere onesto. :)
Virtualmente di piu' non so'...magari dal vivo viene meglio!!!
     ||
---| |------
|              |
|~~~~~~|
|_______|
Mezza gia' l'ho scolata ehh
Ahh come sono ascii art...quasi come javascript art...uguale!
Leonardo