HighDots Forums  

popolare select

Javascript (Italian) Il linguaggio JavaScript (it.comp.lang.javascript)


Discuss popolare select in the Javascript (Italian) forum.



Reply
 
Thread Tools Display Modes
  #1  
Old   
Franco
 
Posts: n/a

Default popolare select - 01-04-2008 , 06:08 PM






in una dynamic drop down faccio delle selezioni ma mi sono accorto di un
errore

<select name='country' id='country' onchange="do_select(1);">

in questa select va tutto ok
mi fa la query e mi popola la seconda select

function do_select(stage)
{
// box = <select>
// id = selected option's value
var countrybox = null;
var countryID = null;

var regionbox = null;
var regionID = null;

var citybox = null;
var cityID = null;

switch(stage)
{
// Country?
case 1:
countrybox = document.getElementById('country');
countryID =
countrybox.options[countrybox.selectedIndex].value;

x_populate_region(countryID, do_region_change);
break;

// Region?
case 2:
countrybox = document.getElementById('country');
countryID =
countrybox.options[countrybox.selectedIndex].value;

regionbox = document.getElementById('region');
regionID = regionbox.options[regionbox.selectedIndex].value;

x_populate_city(countryID, regionID, do_city_change);
break;

// City?
case 3:
countrybox = document.getElementById('country');
countryID =
countrybox.options[countrybox.selectedIndex].value;

regionbox = document.getElementById('region');
regionID = regionbox.options[regionbox.selectedIndex].value;

citybox = document.getElementById('city');
cityID = citybox.options[citybox.selectedIndex].value;

x_populate_selection(countryID, regionID, cityID,
do_final_change);
break;

default:
return;
break;

}

ma se la seconda select ha un solo record non popola la select sottostante
con i dati


come posso fare che alla seconda select se trova 1 dato mi popola la terza
select mentre se ne trova piu di uno aspetta che seleziono il record per
popolare la terza select?





Reply With Quote
  #2  
Old   
Cristiano Larghi
 
Posts: n/a

Default Re: popolare select - 01-05-2008 , 10:29 AM






Il Sat, 5 Jan 2008 01:08:50 +0100, Franco ha scritto:

[CUT]
Quote:
come posso fare che alla seconda select se trova 1 dato mi popola la terza
select mentre se ne trova piu di uno aspetta che seleziono il record per
popolare la terza select?
non fai prima ad aggiungere sempre come prima option "==>>Effettua la tua
scelta<<=="?
Altrimenti devi intervenire quando carichi la prima select: al termine del
popolamento verifichi, se ha un solo valore scateni già la function per la
seconda select.

--
"Non sai che ci vuol scienza
ci vuol costanza
ad invecchiare senza maturità"
F.G.


Reply With Quote
  #3  
Old   
ZER0
 
Posts: n/a

Default Re: popolare select - 01-07-2008 , 05:58 AM



On Sat, 5 Jan 2008 01:08:50 +0100, Franco wrote:

Quote:
select name='country' id='country' onchange="do_select(1);"
Come più volte ho detto in questo newsgroup, non va mai usato lo
stesso valore sia per il name che per l'id. E' un doppio errore:
da un punto di vista logico (name e id hanno differenti valenze,
non sono la stessa cosa, anzi) e da un punto di vista tecnico.
Soprattutto, rischi di avere problemi su IE in più di un caso.

Inoltre sarebbe consigliato (sebbene ovviamente non sia certo un
vincolo ) adeguarsi sempre alla nomenclatura e sintassi usata
nel linguaggio in cui si sviluppa. Sembra una stupidaggine, ma è
davvero utile. A occhio, direi che sei influenzato o dal vecchio
modo di programmare, o da PHP.

Quote:
ma se la seconda select ha un solo record non popola la select sottostante
con i dati
Perché non scatta l'onchange: se ha un solo valore, quello viene
considerato selezionato per default. E l'onchange, si ha solo se
cambia la selezione, a livello di GUI.
Puoi fare due cose, oltre a quello che ti è stato già suggerito:
O sposti la tua funzione dall'onchange all'onclick, oppure vai a
forzare la select, in modo che non selezioni la prima option per
default. Questo lo fai impostando manualmente il selectedIndex:

yourselect.selectedIndex = -1;


Se invece preferisci automatizzare la cosa, come dici qui:

Quote:
come posso fare che alla seconda select se trova 1 dato mi popola la terza
select mentre se ne trova piu di uno aspetta che seleziono il record per
popolare la terza select?
Allora, devi scrivere esattamente quello che hai appena scritto.
Dopo aver popolato la seconda select, controlli quante option ci
sono, se ce n'è solamente una, passi il suo valore alla funzione
che ti popola la terza select. Qualcosa tipo:

// Country?
case 1:
countrybox = document.getElementById('country');
countryID =
countrybox.options[countrybox.selectedIndex].value;

x_populate_region(countryID, do_region_change);

regionbox = document.getElementById('region');

if ( regionbox.options.length == 1 )
x_populate_city(countryID, regionbox.value, do_city_change);


break;

Ti suggerirei ad ogni modo di rivedere la funzione do_select, ci
sono parecchi pezzi ridondanti, in quel codice.

--
~ "Nei film americani, qualsiasi problema che venga considerato
sufficientemente catastrofico, puo' essere risolto facendo esplodere
uno o piu' ordigni nucleari" (ZER0 & Cosimo)



Reply With Quote
Reply




Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off



Powered by vBulletin Version 3.5.4
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.