Newsgroup: it.comp.lang.javascript
Titolo: focus sui campi

Il codice che allego è di una funzione che controlla se i campi di un form
sono vuoti o meno
function chkcampi(NomeCampi)
/* Funzione che verifica l'inserimento di valori nei campi
   Metodo di chiamata : chkcampi('nome1,nome2,nome3,....')
   'nome1,nome2,nome3 sono i nomi dei campi di input del form che si vuole
   controllare
   La funzione deve essere inserita nella apertura del form inserendo il campo
        onsubmit = "return chkcampi('nome1,nome2,nome3,...')"
*/
  {
  var ncampo = NomeCampi.split(",");
  var msg = "Attenzione !";
  var chk = 1;
  for (i=0;i < ncampo.length;i++)
    {
	var nome = ncampo[i];
    if (document.forms[0].elements[nome].value=="")
      {
	  msg=msg+"\n "+ document.forms[0].elements[nome].name.toUpperCase()+"
                    e\' un campo obbligatorio";
	  if (chk == 1)
	    {
		var nome_focus = nome;
        chk=0;
	    }
	  }
	}
  if (chk==0)
    {
  	alert (msg);
	document.forms[0].elements[nome_focus].focus();
	}
  }
La funzione viene chiamata dal form che allego
<?php
readfile ("header.html");
?>
Form con il metodo "onsubmit"
<form action="t2.html" onsubmit="return chkcampi('cognome,via')" name="modulo">
<table>
  <tr>
    <td>nome</td><td><input type="text" name="nome"></td>
	<td>cognome</td><td><input type="text" name="cognome"></td>
	<td>via</td><td><input type="text" name="via"></td>
  </tr>
  <tr>
    <td><input type="submit"></td><td><input type="reset"></td>
  </tr>
</table>
</form>
<?php
readfile ("footer.html");
?>
La funzione va in crisi sull'ultima istruzione di focus().
Dopo aver visualizzato il msg (nel caso debba essere visualizzato)
si vede che il focus passa per un attimo al campo corretto e poi subito
dopo viene portato al browser. Se premo il tasto TAB viene spostato il
focus sul primo campo del form.
Dove sbaglio ?
Grazie in anticipo per l'aiuto.

Avrei bisogno di un aiuto per un problema con il focus sui campi.
Dal codice html che riporto richiamo la funzione chkcampi() che deve
controllare se il campo è vuoto o meno
**************** CODICE HTML
<?php
readfile ("header.html");
?>
Form con il metodo "onsubmit"
<form action="t2.html" onsubmit="return chkcampi('cognome,via')" name="modulo">
<table>
  <tr>
    <td>nome</td><td><input type="text" name="nome"></td>
	<td>cognome</td><td><input type="text" name="cognome"></td>
	<td>via</td><td><input type="text" name="via"></td>
  </tr>
  <tr>
    <td><input type="submit"></td><td><input type="reset"></td>
  </tr>
</table>
</form>
<?php
readfile ("footer.html");
?>
******************* CODICE JAVASCRIPT
function chkcampi(NomeCampi)
/* Funzione che verifica l'inserimento di valori nei campi
   Metodo di chiamata : chkcampi('nome1,nome2,nome3,....')
   'nome1,nome2,nome3 sono i nomi dei campi di input del form che si vuole
   controllare
   La funzione deve essere inserita nella apertura del form inserendo il campo
        onsubmit = "return chkcampi('nome1,nome2,nome3,...')"
*/
  {
  var ncampo = NomeCampi.split(",");
  var msg = "Attenzione !";
  var chk = 1;
  for (i=0;i < ncampo.length;i++)
    {
	var nome = ncampo[i];
    if (document.forms[0].elements[nome].value=="")
      {
	  msg=msg+"\n "+ document.forms[0].elements[nome].name.toUpperCase()+
                   " e\' un campo obbligatorio";      /* questa riga è a
                                                         capo solo per
                                                         l'invio nel ng */
	  if (chk == 1)
	    {
		var nome_focus = nome;
        chk=0;
	    }
	  }
	}
  if (chk==0)
    {
  	alert (msg);
/*	setTimeout('document.forms[0].elements[nome_focus].focus();',200); */
	document.forms[0].elements[nome_focus].focus();
	}
  return
  }
Il problema è che quando si chiude l'ultimo alert(msg) il focus mi passa per
un attimo sul campo giusto e poi si sposta subito alla finestra del
browser. 
Il tutto gira sotto Linux RedHat 9.0, Apache 2.0.40, Mozilla 1.2.1.
Dove sbaglio ?
Grazie in anticipo per l'attenzione.

Il codice che allego è di una funzione che controlla se i campi di un form
sono vuoti o meno
function chkcampi(NomeCampi)
/* Funzione che verifica l'inserimento di valori nei campi
   Metodo di chiamata : chkcampi('nome1,nome2,nome3,....')
   'nome1,nome2,nome3 sono i nomi dei campi di input del form che si vuole controllare
   La funzione deve essere inserita nella apertura del form inserendo il campo
        onsubmit = "return chkcampi('nome1,nome2,nome3,...')"
*/
  {
  var ncampo = NomeCampi.split(",");
  var msg = "Attenzione !";
  var chk = 1;
  for (i=0;i < ncampo.length;i++)
    {
	var nome = ncampo[i];
    if (document.forms[0].elements[nome].value=="")
      {
	  msg=msg+"\n "+ document.forms[0].elements[nome].name.toUpperCase()+" e\' un campo obbligatorio";
	  if (chk == 1)
	    {
		var nome_focus = nome;
        chk=0;
	    }
	  }
	}
  if (chk==0)
    {
  	alert (msg);
	document.forms[0].elements[nome_focus].focus();
	}
  }
La funzione viene chiamata dal form che allego
<?php
readfile ("header.html");
?>
Form con il metodo "onsubmit"
<form action="t2.html" onsubmit="return chkcampi('cognome,via')" name="modulo">
<table>
  <tr>
    <td>nome</td><td><input type="text" name="nome"></td>
	<td>cognome</td><td><input type="text" name="cognome"></td>
	<td>via</td><td><input type="text" name="via"></td>
  </tr>
  <tr>
    <td><input type="submit"></td><td><input type="reset"></td>
  </tr>
</table>
</form>
<?php
readfile ("footer.html");
?>
La funzione va in crisi sull'ultima istruzione di focus().
Dopo aver visualizzato il msg (nel caso debba essere visualizzato)
si vede che il focus passa per un attimo al campo corretto e poi subito
dopo viene portato al browser. Se premo il tasto TAB viene spostato il
focus sul primo campo del form.
Dove sbaglio ?
Grazie in anticipo per l'aiuto.



Maurizio Gallo wrote:
[stracut]
...caspita questo thread mi ha gia' stufato. Secondo voi perche'? :-)
Ciao.
  -Ema-



Chiedo scusa per  l'incidente. Le 4 repliche non erano assolutamente
volute.
Sto usando un programma (PAN) sotto Linux del quale non è ancora pronto
il manuale percui ho fatto un po' di pasticci nel cercare di inviare
il messaggio.

 Grazie in anticipo per l'aiuto.
Prego.
Ciao.
  -Ema-