Newsgroup: it.comp.lang.javascript
Titolo: Combo box in mutua esclusione su Netscape

Ci riprovo...
Data una pagina con N combo ciascuna contenente numeri da 1 ad N ed
inzializzate a valori tutti diversi, mi servirebbe un javascript che,
lanciato all'onchange della combo X , va a controllare quale combo ha
il nuovo valore immesso nella combo X e ne va a cambiare il valore con
quello avuto precedentemente da X (in parole povere, volgio che ad ogni
onchange non ci siamo combo con valoriu uguali).
Ho fatto lo script per explorer, ma non riesco proprio ad adattarlo per
netscape... chi ci riesce?
<script language=javascript>
oldValue=0;
function test(c){
  objs=document.forms[0].elements;
  newValue=objs[c].value;
  for (i=0;i<objs.length;i++){
  if((objs[i].value==newValue) && (objs[i].name!
=c)){
    objs["ordine"+(i+1)].value=oldValue;
  }
  }
}
</script>
<body>
<form>
<select name ="ordine1" onChange='test(
this.name
)'
onFocus='oldValue=this.value'>
  <option selected value="1">1
  <option value="2">2</select>
<select name ="ordine2" onChange='test(
this.name
)'
onFocus='oldValue=this.value'>
  <option value="1">1
  <option selected value="2">2
</select>
</form>
</body>
Sent via Deja.com
http://www.deja.com/

 netscape... chi ci riesce?
Perchè complicarsi la vita??...........:-))))))))))
<html>
<head>
<title>test</title>
<script language="javascript">
function chg(z){
if(z==0){
document.forms[0].sel[1].options.selectedIndex=0
}
else if(z==1){
document.forms[0].sel[0].options.selectedIndex=0
}
}
</script>
</head>
<body >
<form method="POST">
  <p><select size="1" name="sel" onChange="chg(0)">
    <option selected value="uno">1</option>
    <option value="due">2</option>
  </select>
  <select size="1" name="sel" onChange="chg(1)">
    <option value="uno">1</option>
    <option selected value="due">2</option>
  </select></p>
</form>
</body>
</html>
andreotta fabiano
 WebMªster ATI POWER s.n.c.
 
andr...@atipower.it
 
http://www.atipower.it
    -new-
 
http://www.aticommerce.com
 
http://www.afdsoftware.freeweb.org
 
http://www.jsdir.com

<html>
<head>
<title>test</title>
<script language="javascript">
aa=new Array()
function chg(z){
for(i=0; i<document.forms[0].sel.length; i++){
aa[i]=document.forms[0].sel[i].options.selectedIndex
}
if(z==0 && aa[1]==1){
document.forms[0].sel[1].options.selectedIndex=0
}
else if(z==1 && aa[0]==1){
document.forms[0].sel[0].options.selectedIndex=0
}
else if(z==0 && aa[1]==0){
document.forms[0].sel[1].options.selectedIndex=1
}
else if(z==1 && aa[0]==0){
document.forms[0].sel[0].options.selectedIndex=1


Ti ringrazio per l'aiuto, comunque dato che il numero di combo presenti è
dinamico, l'approccio con quegli else-if non mi pare perseguibile.

 netscape... chi ci riesce?
[]
Non funziona correttamente nemmeno con IE; se selezioni 2 volte dalla
stessa lista le modifiche non sono effettuate perche' non cambia la
variabile oldValue (non scatta onFocus).
La sintassi da te usata per leggere/scrivere il valore dell'opzione
selezionata e' una implementazione di IE, quella corretta e':
objSelect.options[objSelect.selectedIndex].value
quindi devi fare le seguenti modifiche:
------ nei tag select --------------
<select size=3 name ="ordine2" onChange='test(
this.name
);this.blur()'
onFocus='oldValue=this.options[this.selectedIndex].value'>
--------------------------
this.blur() serve a togliere momentaneamente il fuoco dall'oggetto e
quindi far scattare nuovamente onFocus per aggiornare la variabile
oldValue
--------- script -----------
oldValue=0;
function test(c){
    objs=document.forms[0].elements;
    newValue=objs[c].options[objs[c].selectedIndex].value;
      for (i=0;i<objs.length;i++){
         if((objs[i].options[objs[i].selectedIndex].value==newValue) &&
(objs[i].name!=c)){
              for (z=0;z<objs[i].options.length;z++){
                   if (objs[i].options[z].value==oldValue)
objs[i].options[z].selected=true;
              }
         }
      }
}
--------------------------
Il ciclo interno diventa necessario per trovare l'option che ha come
valore *oldValue* e selezionarla.
Saluti, Paolo