Devi usare eval() o getElementById() quando ti riferisci ad un oggetto a partire dalla concatenazione di una o più stringhe e di una variabile. JavaScript non capisce cose come:
var f = "document.form" + n + ".elements.length";
dove n è un numero o una stringa. Questo perché l'oggetto form è appunto di tipo Object, mentre concatenando stringhe e variabili, ottieni una stringa (oggetto di tipo String). Di conseguenza, o usi eval() (che non ti consiglio perché consuma parecchie risorse e non è un metodo standard), oppure attribuisci un id al form su cui vuoi che la funzione operi e lo recuperi con document.getElementById(ID_ELEMENTO). getElementById() è molto versatile, perché ti permette ad es. di accedere direttamente ad un elemento (a cui hai attribuito un id) del form senza passare per l'oggetto form che lo contiene (come invece dovevi fare con document.NOMEFORM.NOMECAMPO). Inoltre, getElementById() permette di evitare l'uso di eval() perché accetta come argomento sia stringhe che variabili e riesce a concatenarle trasformandole automaticamente in un oggetto di tipo Object. Scrivendo ad es.:
var txt = document.getElementById("testo" + n).value;
dove n è un numero o una stringa, puoi accedere direttamente al campo di testo che ha un attributo id="testoQUALCOSA" (e nota che non passi per il form che contiene il campo di testo).![]()