Newsgroup: it.comp.lang.javascript
Titolo: problema con select e javascript

Ciao a tutti,
ho un problema con l'assegnazione dei valori da una select a un altra.
Brevemente la prima select è cosi definita:
<select id="groupsA" name="groupsA" onChange="setValue(this.form.groupsA, 
this.form.groupsB);">
    <option value="A" selected="selected">A</option>
    <option value="B"> B </option>
    <option value="C"> C </option>
</select>
Mentre la seconda select è cosi definita:
<select id="groupsB" name="groupsB">
    <option value="1" selected="selected">1</option>
    <option value="2"> 2 </option>
    <option value="3"> 3 </option>
</select>
La funzione setValue (param1, param2) è cosi definita:
 function setValue (param1, param2) {
     if (param1.options[param1.selectedIndex].value != "A") {
        myValue = "1";
	  } else {
        myValue = "2";
	  }
     for (var counter=0; counter < param2.length; counter++) {
        if (param2.options[counter].value == myValue) {
           tmp = counter;
        }
     }
     return selectObjectServer[tmp].selected = myValue;
 }
Ora il problema è nella riga:
     return param2.[tmp].selected = myValue;
Il mio obiettivo è cambiare il valore della select groupsB; però non 
sortisce di alcun effetto.
Dove sbaglio?
L'obiettivo è:  Se l'utente dalla select groupsA imposta un valore diverso 
da A allora il valore della select groupsB deve essere impostato a 1 
altrimenti in tutti gli altri casi deve essere impostato a 2.
Grazie in anticipo a chi mi aiuta a risolvere questo problema.
Cooper.
 

 Grazie in anticipo a chi mi aiuta a risolvere questo problema.
Occhio pero' che le condizioni di partenza sono groupsA con valore "A" e 
groupsB con valore "1", cioe' una delle condizioni che non vorresti.
Oltre al fatto che dovrai ovviamente gestire anche l'evento onchange 
della seconda select.

 return param2.options[tmp].selected = myValue;
Scusa, poco fa ho risposto un po' troppo in fretta.
Rimaneggiando al volo la riga incriminata guardando il tuo codice, non 
ti ho proposto una gran soluzione.
La riga funzionerebbe, ma sarebbe bene assegnare un valore booleano a 
selected... quindi:
param2.options[tmp].selected = true;
return myValue;
Gia' che ci sono aggiungo che potresti riscrivere piu' elegantemente il 
tutto usando il classico operatore ternario al posto dell'if iniziale e 
anche fermare il ciclo quando il risultato e' stato trovato:
(scrivo al volo senza testare)
function setValue(sel1, sel2){
     var myValue = sel1.options[sel1.selectedIndex].value != "A" ? "1" : 
"2";
     for(var i = 0, ops = sel2.options; i < ops.length; i++)
         if(ops[i].value == myValue){
             ops[i].selected = true;
             break;
         }
     return myValue;
}

 }
Ho ricopiato il tuo script in sostituzione di quello precedente, tuttavia 
non sortisce di alcun effetto.
Se dalla prima lista cambio il valore da A a B mi dovrei aspettare il valore 
1 e quando ritorno al valore A dovrei aspettarmi il valore 2 della seconda 
select.
Nello script come risultato assegni un valore booleano; perň la mia 
intenzione č assegnare il nuovo valore alla seconda select; un nuovo valore 
in funzione della selezione effettuata sulla prima select.
Come dovrei quindi aggiustare il tutto?
Grazie ancora,
Cooper.
 

 Come dovrei quindi aggiustare il tutto?
Qui sotto ti incollo la mia pagina di test, ma riproduce solo quel che 
hai detto all'inizio e non e' l'ideale per la tua situazione mi sembra.
Usala come spunto perche' c'e' tutto quel che ti serve, direi.
<!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
">
<head>
     <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
     <title>Untitled</title>
     <script type="text/javascript">
     // <![CDATA[
         function setValue(sel1, sel2){
             var myValue = sel1.options[sel1.selectedIndex].value != "A" 
? "1" : "2";
             for(var i = 0, ops = sel2.options; i < ops.length; i++)
                 if(ops[i].value == myValue){
                     ops[i].selected = true;
                     break;
                 }
             return myValue;
         }
     // ]]>
     </script>
</head>
<body>
     <form action="#">
         <select id="groupsA" name="groupsA" 
onchange="alert(setValue(this, this.form.groupsB));">
            <option value="A" selected="selected">A</option>
            <option value="B"> B </option>
            <option value="C"> C </option>
         </select>
         <select id="groupsB" name="groupsB">
            <option value="1" selected="selected">1</option>
            <option value="2"> 2 </option>
            <option value="3"> 3 </option>
         </select>
     </form>
</body>
</html>

 ha scritto nel messaggio 
news:49135bdd$0$41652$4faf...@reader4.news.tin.it...

Grazie del tuo aiuto, c'č solo un problema, al primo tentativo se cambio da 
A a B o a C la seconda select non sortisce di alcun effetto, ma se dopo 
passo da un valore diverso allora si cambia anche la seconda select, a cosa 
č dovuto questo problema? come lo risolvo?
Grazie infinite ancora,
Cooper.
 

> rimane su "1". Se torni ad "A" passa a "2". 
Tu hai messo:
<option value="A" selected="selected">A</option>
[...]
<option value="1" selected="selected">1</option>
Queste sono le opzioni selezionate al caricamento della pagina, e 
presentano una situazione indesiderata date le tue premesse.
Poi, certo cambiando da "A" a "B" per forza rimane il valore uno: li' 
deve essere uno (sempre secondo le tue premesse).