Newsgroup: it.comp.lang.javascript
Titolo: focus Netscape ed Opera

Salve,
in Netscape ed Opera c'è modo di dare il focus ad un determinato elemento
della pagina?
Per IE scrivo questa istruzione
document.forms["frm"].elements[nome].focus();  (dove 'nome' corrisponde al
this.name
)
e funziona.
Ma per Netscape ed Opera no.
Grazie.
Andrea.

Stranissimo, secondo me dovrebbe funzionare...
stai eseguendolo onload?

Guarda ho questa funzione per il controllo data , che richiamo
dall'onChange...
<input type="text" name="email" size="40" value="" onChange="return
ControllaData(this,
this.name
);"
function ControllaData(campo,nome)
//Controlli formali sulla data digitata
{
 var anno
 var mese
 var mesi
 var giorno
 valore = campo.value;
 var prova;
 if  (valore != '')
 {
  if (valore.length != 10)
   {
   alert("Attenzione!! Il valore del campo *Data* deve essere di tipo data
(gg/mm/aaaa).");
   document.forms["isn"].elements[nome].focus();
    return (false)
   }
  else
   {
   anno = parseInt(valore.substring(6,10))
   }
  if (valore.substring(0,1) == 0)
  {
   gior = parseInt(valore.substring(1,2))
  }
  else
  {
   gior = parseInt(valore.substring(0,2))
  }
  if (valore.substring(3,4) == 0)
  {
   mese = parseInt(valore.substring(4,5));
  }
  else
  {
   mese = parseInt(valore.substring(3,5));
  }
  if (isNaN(anno)==true)
   {
   alert("Attenzione!! Data errata.");
    document.forms["isn"].elements[nome].focus();
   return false;
   }
  if (isNaN(gior)==true)
   {
   alert("Attenzione!! Data errata.");
    document.forms["isn"].elements[nome].focus();
   return false;
   }
  if (isNaN(mese)==true)
   {
   alert("Attenzione!! Data errata.");
    document.forms["isn"].elements[nome].focus();
   return false;
   }
  if (anno < 1900)
   {
   alert("Attenzione!! Data errata.");
    document.forms["isn"].elements[nome].focus();
   return false;
   }
  mesi = new Array(31,28,31,30,31,30,31,31,30,31,30,31)
  if (((anno % 4) ==0) && ((anno % 100) !=0))
   {
   mesi[1]=29
   }
  else
   {
   if ((anno % 400) ==0)
    {
    mesi[1]=29
    }
   }
  if (mese > 12)
   {
   alert("Attenzione!! Data errata!!!.");
    document.forms["isn"].elements[nome].focus();
    return false;
   }
  if (gior > mesi[mese-1])
   {
   alert("Attenzione!! Data errata.");
    document.forms["isn"].elements[nome].focus();
   return false;
   }
 }
 return true;
}

Stranissimo...
prova (la sparo) a togliere il return
(onchange='ControllaData(this,
this.name
)')

Non funziona.....nemmeno con IE così....non mi importa, faccio controlli
anche lato server.
Grazie e ciao (alla prossima)!!!
Andrea.

 Grazie e ciao (alla prossima)!!!
Noo aspetta...
Tanto per iniziare funziona con IE6, MZ1.5, OP7.21;
forse tu non volevi mettere il fuoco ma volevi selezionarlo! Quindi devi
usare ...select();
Poi ti consiglio caldamente di ottimizzare la funzione che hai postato,
perche' fa abbastanza spavento:
Ti do qualche dritta:
-   tutti quei:
        document.forms["isn"].elements[nome].focus()
    cambiali con:
        campo.focus() o meglio campo.select();
-    Tutti quei controlli:
      if (isNaN(anno)==true){
            alert("Attenzione!! Data errata.");
            document.forms["isn"].elements[nome].focus();
            return false;
        }
        if (isNaN(gior)==true)
        ...
        if (isNaN(mese)==true)
        ...
        if (anno < 1900) if (mese > 12) if (gior > mesi[mese-1])
    Incorporali il piu' possibile:
        if(isNaN(gior) || isNaN(mese) ||...)
-    Poi ci sarebbero alter cose, per ora...

Ho provato ad usare .select()  ed effettivamente seleziona il campo quando
la data è errata, ma lo colora e basta con Netscape e se scrivo, modifico il
valore del campo successivo (mentre con IE  colora e si posiziona sul campo
data).
Andrea.

 valore del campo successivo
ALT!
Ma tu non ci avevi detto tutto! Quasi certamente stai usando qualche altro
evento per andare nell'altro campo nel caso abbia raggiunto (ad es.) tot
caratteri o qualcosaltro... Perche' ti ripeto per l'ultima volta, il codice
cosě da te postato FUNZIONA!
Poi tra le tante cose che non capisco perche' si tratta di un "campo data" e
si chiama email???
In fine se priprio vuoi essere sicuro non mettere un campo di testo,
iserisci 3 select:
  <select size="1" name="giorno">
  <option>1</option>
  <option>...</option>
  <option>31</option>
  </select>
  <select size="1" name="mese">
...
  <select size="1" name="anno">
in questo caso devi solo controllare che non inseriscano 30 feb..., casa che
comunque non facevi, allora funziona anche senza JS...
Oppure se cosě non ti piace metti 3 campi testo cosě:
<input type="text" name="giorno" maxLength="2" size="3" name="giorno"> /
<input type="text" name="mese" maxLength="2" size="3"> /
<input type="text" name="anno" maxLength="4" size="5">
e se poi vuoi metti uno scriptino per far inserire solo dei numeri non altre
lettere:
 onKeyPress="return onlyNum(event)"
e da qualche parte:
function onlynum(e)
{
    if (e.which){
        if(e.which!=46 && e.which!=8 && (e.which<48 || e.which>57))
        return false;
    }
    else if(e.keyCode){
        if(e.keyCode!=46 && e.keyCode!=8 && (e.keyCode<48 || e.keyCode>57))
        return false;
    }
    return true;
}