Ver Mensaje Individual
  #4 (permalink)  
Antiguo 18/01/2010, 07:09
Avatar de ceSharp
ceSharp
 
Fecha de Ingreso: octubre-2008
Ubicación: Madrid
Mensajes: 495
Antigüedad: 15 años, 6 meses
Puntos: 66
Respuesta: undefined en funcion

hola yoyo,

varias cosas:
1) te falta un objeto con id="enviar", por eso te da fallo. Tratas de enfocar un objeto que no existe
2) intenta que tus input text lleven id="..." no name="..." te lo digo porque para luego cazar el objeto es más útil usar document.getElementById('...') en tu código, por ejemplo, los values de los document.frmfol.A23 (por ejemplo) no lo está cogiendo bien (no me digas porqué pero ese sería otro tema). si pruebas con getElementById el value lo coge perfectamente.
3) si en los input text pasas un valor que no es númerico, los v1, v2 y v3 de tu código se convierten en NaN (not a number, no número) y cuando haces la resta de alguno de esos valores el result = NaN, con lo cual también te está fallando por eso
4) hay un momento que preguntas por una variable (v4) que no está creada y dices que si es undefined es entonces cuando la creas:
if(v4 == undefined)
var v4 = ......
no pasa nada pero no tiene mucho sentido. Evidentemente v4 va a ser undefined porque no está creada, o sea, siempre va a pasar por ahí. los if's se construyen para que vaya por un sitio o por otro (o por otros sitios más si haces unos else if...), pero es tontería crear un if para que siempre pase por ahí, no? te ahorras una línea de código (que visto así puede parecer una tontería, pero un script de 1000 lineas poder ahorrarte 200 es un alivio)

y creo que nada más. te paso el código corregido a ver si te funciona así.
------------------------------------------------------
<script type="text/javascript">
function resultado(){debugger;
var v1 = parseFloat(document.getElementById('A23'));
if(isNaN(v1))
v1 = 0;
var op = document.getElementById('operacion').value;
var v2 = parseFloat(document.getElementById('A21').value);
if(isNaN(v2))
v2 = 0;
var v3 = parseFloat(document.getElementById('A22').value);
if(isNaN(v3))
v3 = 0;

var result;
if(op == 'suma1')
result =v1 - v2- v3 ;



if(document.getElementById('A23').value!='' && document.getElementById('A21').value!='' && document.getElementById('A22').value!=''){
document.getElementById('A20').value=result;
document.getElementById('enviar').focus();
}else{
document.getElementById('A20').value='';
}

if(v4==undefined) {
var v4 = parseFloat(document.getElementById('A20').value);
if(op == 'suma2')
result =v1 - v4- v3 ;
if(document.getElementById('A23').value!='' && document.getElementById('A20').value!='' && document.getElementById('A22').value!=''){
document.getElementById('A21').value=result;
document.getElementById('enviar').focus(); }
else{
document.getElementById('A21').value='';
}

}
}


</script>

<div>
<tr>
<td>
<select id="operacion">
<option value="suma1">Calcular Materiales</option>
<option value="suma2">Calcular Mano de Obra</option>
<option value="">Suma 3 Campos</option>

</select>

</td>
<td>
<input id="A20" type="text" size="13" value="valor1" onKeyUp="resultado();"/>
</td>
<td>
<input id="A21" type="text" size="13" value="valor2" onKeyUp="resultado();"/>


</td>
<td>
<input id="A22" type="text" size="13" value="valor3" onKeyUp="resultado();"/>
</td>
<td>
<input type="text" id="A23" size="13" value="valor4" onKeyUp="resultado();"/>
</td>
</tr>
--------------------------------------

cualquier duda ya sabes donde estamos ;)

salu2