- Home
- Categorie
- Coding e Sistemistica
- Javascript & Framework
- Valutazione di un oggetto da una stringa
-
Valutazione di un oggetto da una stringa
Ciao,
ho una serie di text input<input type="text" name="value_1">
<input type="text" name="value_2">
....
<input type="text" name="value_n">in quantità variabile, e devo verificare che su tutti ci sia un valore numerico.
Per scorrerli allora creo la stringavar objStr = "document.nomeForm.value_" + counter;
che poi opportunamente valuto e typecasto:
obj = eval(objStr);
objValue = parseFloat(obj.value);Tutto ciò funziona perfettamente se testato su un input, ma non più se lo metto all'interno di un ciclo while per scorrere tutti i valori di counter:
[php]
function checkFields() {
var d = document;
var counter = 1;
var errorMsg = "";while (counter < 16) { objStr = "d.nomeForm.value_" + counter; obj = eval(objStr); objValue = parseFloat(obj.value); if ((objValue == '') || (typeof(objValue) != 'number')) { errorMsg += 'The values entered must be numeric. objValue is ' + typeof(objValue); break; } else { counter++; } } if (errorMsg != "") { alert(errorMsg); return false; } else { alert('ok'); return true; } }
[/php]
Potreste indicarmi dove ho l'inghippo?
-
Ho trovato la soluzione, dovevo verificare prima l'esistenza dell'oggetto (con la condizione typeof(valore) != 'undefined').
Inoltre l'errore non veniva rilevato mai perché se il valore dell'oggetto veniva castato con parseFloat() il typeof restituiva sempre number, ma era considerato come NaN dall'interprete.
Quindi, siccome NaN è un valore falso, basta controllare che questo si verifichi perché si incrementi errorMsg:
[php]
function checkFields() {
var d = document;
var errorMsg = "";while (counter < 15) { var objStr = "d.nomeForm.value_"+counter; var obj = eval(objStr); if (typeof(obj) != 'undefined') { // if the object exists: var objValue = parseFloat(obj.value); if (!objValue) { errorMsg += 'The value entered in field ' + counter + ' must be numeric. objValue = ' + objValue + '\n'; } } counter++; } if (errorMsg != "") { alert(errorMsg); return false; } else { alert('ok'); return true; }
[/php]