Newsgroup: it.comp.lang.javascript
Titolo: Validare una form dinamica

Salve a tutti ho cercato con google nei vecchi post ma non ho trovato 
nulla che mi possa essere di aiuto. Provo  a spiegare il mio problema 
nella speranza di essere chiaro:
Ho una form formata da un numero n di campi dinamici e tre campi statici 
ad es:
-Nome   (campo dinamico)
-Cognome (campo dinamico)
....
....
-Email (campi fissi)
-Password (campi fissi)
-re-password (campi fissi)
Ecco il codice PHP della form per quanto rigurda i campi dinamici:
<form name='form_ins' id='form_ins' action='conferma.php' method=post 
onsubmit='return Valida(this)'></td></tr>");
/*Campi dinamici */
while($riga=mysql_fetch_array($risultato,MYSQL_BOTH)){
  echo("<tr><td><b>".$riga['Nomi']."</b></td><td><input type=text 
size=20 name=dati[] id=dati>");
}
Ecco il codice Javascript che avevo pensato ma che non mi dà alcun 
errore ma non fa quello di cui ho bisogno:
for(var i=0,objs=document.getElementsByTagName("input")[i];i++){
  if(objs[i].value=="");
   alert("Non hai riempito il campo!!");
   ok_campi=false;
}
Grazie a chi mi aiuterà e spero di essere stato sufficientemente chiaro :-)
Ciro

 for(var i=0,objs=document.getElementsByTagName("input")[i];i++){
 puoi usare direttamente la form:
document.forms['form_ins'].getElementsByTagName("input"); 
inoltre non devi mettere [i] perché objs deve essere la collection da
scorrere.
Ancora meglio objs=document.forms['form_ins'].elements; così non perdi
inutilmente compatibilità con IE4 e affini (in tal caso devi verificare che
il type sia text).
-- 
"Voi abili a tenere sempre un piede qua e uno là
 avrete un avvenire certo in questo mondo qua
 però la dignità
 dove l'avete persa?"
									    V.R.

 
Ok inanzitutto grazie per la celere risposta. Ho fatto come tu mi hai 
suggerito modificando il pezzo della funzione così:
for(var i=0;objs=document.forms['form_ins'].elements;i++){
  if(objs.value=="");
   ok_campi=false;
   alert("Devi riempire il/i campo/i evidenziato/i");
   break;
}
Il problema adesso è che l'alert, in caso io lasci un campo vuoto, và in 
loop infinito. Ho aggiunto un break alla fine del for ma ho ottenuto 
solo che facendo un pò di testing mi rilevi solo il primo campo vuoto e 
non i successivi (logicamente).
Oltre a questo vorrei sapere come fare per evidenziare i campi che 
lascio vuoti con css, ho provato a fare così ma non và:
objs.style.background="yellow";
Grazie ancora e spero che avrai ancora tempo da dedicarmi.
Ciro

 objs.style.background="yellow";
Sempre per il solito discorso: objs è una collection, ovvero una lista di
elementi, non un singolo elemento. Per accedere al singolo elemento devi
utilizzare l'indice, e quindi supponendo che quell'istruzione sia
all'interno del ciclo:
objs[i].style.backgroundColor = "yellow";
-- 
~ "When you have eliminated the impossible, whatever remains,
however improbable, must be the truth." (S.H.)

[Cut]
Ecco la funzione con le modifiche da te suggerite. Non avevo messo 
l'indice in quanto non credeve che fosse necessario (devo studiare :-P).
for(var i=0;objs=document.forms['form_ins'].elements;i++){
  if(objs[i].value=="");
   ok_campi=false;
   alert("ATTENZIONE CAMPO VUOTO");
   objs[i].style.backgroundColor = "yellow";
   break;
}
Il problema è che adesso mi dà campo vuoto anche quando non lo è e se 
tolgo il break mi colora tutto anche i bottoni (Mozilla Firefox) O_o
Ciro

 for(var i=0;objs=document.forms['form_ins'].elements;i++){
for (var i=0,objs = document.forms["form_ins"].elements;i<objs.length;i++)
E se non vuoi che si fermi al primo campo con value nulla, leva il break
dall'if che ti ho fatto.


 tolgo il break mi colora tutto anche i bottoni (Mozilla Firefox) O_o
Perché è quello che gli hai detto di fare. Ricordati che il computer è
fondamentalmente stupido: non fa ciò che vuoi, fa ciò che gli dici di fare.
:)


 
Stesso problema il ciclo non si ferma e mi colora tutti i campi della 
form anche se non sono vuoti.
for(var i=0,objs=document.forms['form_ins'].elements;i<objs.length;i++){
  if(objs[i].value=="");
   ok_campi=false;
   alert("ATTENZIONE CAMPO VUOTO");
   objs[i].style.backgroundColor = "yellow";
}
Chissà se ne vengo a capo in ogni caso grazie mille per la pazienza.
Ciro

    objs[i].style.backgroundColor = "yellow";
E quindi ti colora tutti i campi, perché arriva fino alla fine del ciclo, a
prescindere che siano vuoti o meno.


 
Ed io sono più stupido di lui :-)
Grazie mille ti devo un caffè :-D
Ciro