• User

    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 stringa

    var 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?


  • User

    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]