eliminare un <option> da una <select>

briglia23

Nuovo Utente
24 Giu 2008
28
0
0
Come da oggetto vorrei fare una funzione javascript che si comporti nel seguente modo:

Ho 3 <select> vorrei che selezionado una <option> nella prima, questa venisse cancellata nelle altre 2, passando alle seconda <select>, selezionando una <option> anche in questa, essa venisse cancellata nella terza.

Grazie a tutti.
 
Immagino che i dati tu li estragga da un database per selezionare le select, giusto?

Se hai questa esigenza, secondo me, non gestisci bene i dati.

Mi spieghi la struttura dei dati che visualizzi nelle select? Magari la soluzione che hai in mente è by-passabile... ammesso che non ti interessi semplicemente il virtuosismo :)
 
In effetti i dati li estraggo da un db, ma non posso fare diversamente da come ho fatto in quanto (usando jsp) uso un solo metodo per tutte le select per rendere il codice + leggero.
In realtà ci sono "quasi riuscito".
Dico quasi perchè la soluzione che ho trovato preenta un baco.
Te la posto nel caso ci volesi dare una controllata.

<html>
<head>
<title>Mutua esclusione</title>
<script type="text/javascript">
function cancellaOption(idSelect,valore,idRem01,idRem02){
alert(idSelect);
alert(idRem01);
alert(idRem02);
option_da_cancellare = document.getElementById(idSelect).selectedIndex;
alert(option_da_cancellare);
if(option_da_cancellare >=0){
document.getElementById(idRem01).options[option_da_cancellare]=null;
document.getElementById(idRem02).options[option_da_cancellare]=null;
}
}

</script>
</head>
<body>
<!-- <select id="A" onChange="javascript:rimuovivoce();">-->
<select id="A" onChange="javascript:cancellaOption(this.id,this.value,'B','C');">
<option name="data" value="data">DATA ODIERNA</option>

<option name="datiSoc" value="datiSoc">DATI SOCIETARI</option>
<option name="campiFissi" value="campiFissi">CAMPI FISSI</option>
</select>

<select id="B" onChange="javascript:cancellaOption(this.id,this.value,'A','C');">
<option name="data" value="data">DATA ODIERNA</option>
<option name="datiSoc" value="datiSoc">DATI SOCIETARI</option>
<option name="campiFissi" value="campiFissi">CAMPI FISSI</option>

</select>

<select id="C" onChange="javascript:cancellaOption(this.id,this.value,'A','B');">
<option name="data" value="data">DATA ODIERNA</option>
<option name="datiSoc" value="datiSoc">DATI SOCIETARI</option>
<option name="campiFissi" value="campiFissi">CAMPI FISSI</option>
</select>

</body>

</html>


Grazie
 
con questa soluzione ho il problema che gli indici vengono aggiornati.
Esempio:

se dalla seconda select elimino il secondo option (id=1) questo viene correttamente cancellato, il problema è che nel momento della eliminazione gli indici delle altre select si aggiornano ed invece che essere 0 e 2 diventano 0-1.
C'è un modo x far sì che, una volta eliminato un option gli indici delle altre select non vengano modificati?
 
<html>
<head>
<title>Mutua esclusione</title>
<script type="text/javascript">
function cancellaOption(idSelect,valore,idRem01,idRem02){
/*alert(idSelect);*/
/*alert(valore)*/
/*alert(idRem01);*/
/*alert(idRem02);*/
mySelect = document.getElementById(idSelect).id;
/*alert(mySelect);*/
option_da_cancellare = document.getElementById(mySelect).options[valore].value;
/*alert(option_da_cancellare);*/
if(option_da_cancellare != ""){
opt01 = document.getElementById(idRem01).options[option_da_cancellare].id;
opt02 = document.getElementById(idRem02).options[option_da_cancellare].id;
/*alert(opt01);*/
/*alert(opt02);*/
document.getElementById(idRem01).options[opt01]=null;
document.getElementById(idRem02).options[opt02]=null;
}
}

</script>
</head>
<body>
<select id="A" onChange="javascript:cancellaOption(this.id,this.value,'B','C');">
<option id="0" name="data" value="data">DATA ODIERNA</option>
<option id="1" name="datiSoc" value="datiSoc">DATI SOCIETARI</option>

<option id="2" name="campiFissi" value="campiFissi">CAMPI FISSI</option>
</select>

<select id="B" onChange="javascript:cancellaOption(this.id,this.value,'A','C');">
<option id="0" name="data" value="data">DATA ODIERNA</option>
<option id="1" name="datiSoc" value="datiSoc">DATI SOCIETARI</option>
<option id="2" name="campiFissi" value="campiFissi">CAMPI FISSI</option>
</select>


<select id="C" onChange="javascript:cancellaOption(this.id,this.value,'A','B');">
<option id="0" name="data" value="data">DATA ODIERNA</option>
<option id="1" name="datiSoc" value="datiSoc">DATI SOCIETARI</option>
<option id="2" name="campiFissi" value="campiFissi">CAMPI FISSI</option>
</select>

</body>
</html>
 
Grazie 1000 per avermi risposto, stavo cercando di adattarlo al mio sito, ma non ci sono riuscito perchè non sono molto pratico di JS, ti posto il codice interessato così se ti va mi dai una mano:

PHP:
   for($i=1;$i<=32;$i++){
 echo" <tr align=\"center\"><td><span class=\"txtnum\">$i-</span></td><td><select id=\"$i\" name=\"tabellone _giocatore_1_$i\" onchange=\"aggiornasel(this.id,this.value);\"  >"; echo"<option value=0> ";
  $query_giocatori1="SELECT * FROM iscrizioni
			    WHERE iscrizioni_torneo='$torneo' AND iscrizioni_U10M=1 AND iscrizioni_sing_U=1";}
 $res_query_giocatori1 = mysql_query($query_giocatori1) or die (mysql_error()); 
 while($row_giocatori1=mysql_fetch_array($res_query_giocatori1)){
					$giocatori1=$row_giocatori1['iscrizioni_giocatore'];
				    $query_giocatori2="SELECT * FROM user
			                          WHERE user_id='$giocatori1' AND user_class_attuale >='$tabellone_class_iniz' AND user_class_attuale <='$tabellone_class_finale'";
				   $res_query_giocatori2 = mysql_query($query_giocatori2) or die (mysql_error()); 	
				   $row_giocatori2=mysql_fetch_array($res_query_giocatori2);
				   $cognome=$row_giocatori2['user_cognome'];
				     $nome=$row_giocatori2['user_nome'];
					 if($row_giocatori2){
					
				  echo"<option value=$giocatori1>$cognome $nome[0].";
				  }
				               }echo"</tr></select>";
							   }echo"</table> ";	
		
					           }echo"</td>";
In sostanza sono 32 select (generato con un ciclo for) una sotto l'altra il cui id varia al variare della variabile $i del ciclo for,ho provato a modificare il tuo codice così ma non va!
Codice:
function aggiornasel(idSelect,valore){
/*alert(idSelect);*/
/*alert(valore)*/
/*alert(idRem01);*/
/*alert(idRem02);*/
mySelect = document.getElementById(idSelect).id;
alert(mySelect);
option_da_cancellare = document.getElementById(mySelect).options[document.getElementById(idSelect).selectedIndex].value;
alert(option_da_cancellare);
if(option_da_cancellare != ""){
 
   for(i=1;i<=32;i++){
opt01 = document.getElementById(i).options[option_da_cancellare].value;

alert(opt01);

document.getElementById(i).options.value[opt01]=null;
}
}
}
 
Ultima modifica:

Discussioni simili