Foros del Web » Programando para Internet » Javascript »

undefined en funcion

Estas en el tema de undefined en funcion en el foro de Javascript en Foros del Web. Buenas noches amigos del foro tengo la siguiente funcion que hace hace 2 restas la primera resta me la hace bien , pero cuando hago ...
  #1 (permalink)  
Antiguo 16/01/2010, 22:24
Avatar de yoyoyo82  
Fecha de Ingreso: julio-2009
Ubicación: Springfield
Mensajes: 159
Antigüedad: 14 años, 9 meses
Puntos: 1
undefined en funcion

Buenas noches amigos del foro tengo la siguiente funcion que hace hace 2 restas la primera resta me la hace bien , pero cuando hago la segundo me pone que mi campo es undefined esta es la funcion
function resultado(){
var v1 = parseFloat(document.frmfol.A23.value);
var op = document.frmfol.operacion.value;
var v2 = parseFloat(document.frmfol.A21.value);
var v3 = parseFloat(document.frmfol.A22.value);

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



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

}else{
document.frmfol.A20.value='';
}

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

}
}
Saludos y gracias
  #2 (permalink)  
Antiguo 17/01/2010, 03:52
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Respuesta: undefined en funcion

Hola yoyoyo82

¿Tienes bien puestos los nombre de los campos del formulario?

Pon aquí el formulario y dinos en qué línea da el error.

Saludos,
  #3 (permalink)  
Antiguo 17/01/2010, 10:46
Avatar de yoyoyo82  
Fecha de Ingreso: julio-2009
Ubicación: Springfield
Mensajes: 159
Antigüedad: 14 años, 9 meses
Puntos: 1
Respuesta: undefined en funcion

Ok gracias JavierB estos son los campos del formulario
<tr>
<td>
<select name="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 name="A20" type="text" size="13" value="<?php echo $ma1; ?>" onKeyUp="resultado();"/>
</td>
<td>
<input name="A21" type="text" size="13" value="<?php echo $mn1; ?>" onKeyUp="resultado();"/>


</td>
<td>
<input name="A22" type="text" size="13" value="<?php echo $ast1; ?>" onKeyUp="resultado();"/>
</td>
<td>
<input type="text" name="A23" size="13" value="<?php echo $s1; ?>" onKeyUp="resultado();"/>
</td>
</tr>
El problema de undefined lo muestra cuando quiero hacer el calculo de mano de obra que esta asignado ha A21 y $mn1 otra cosa suma1 es la resta 1 y suma 2 es la resta 2 en la cual me marca el undefined
Saludos y Gracias

Última edición por yoyoyo82; 17/01/2010 a las 15:32
  #4 (permalink)  
Antiguo 18/01/2010, 07:09
Avatar de 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
  #5 (permalink)  
Antiguo 18/01/2010, 07:13
Avatar de ceSharp  
Fecha de Ingreso: octubre-2008
Ubicación: Madrid
Mensajes: 495
Antigüedad: 15 años, 6 meses
Puntos: 66
Respuesta: undefined en funcion

... yo y mis debugger.... ;)
en el script, al inicio de la función hay un debugger; que deberías borrar para que no se detenga la función y vaya paso a paso si tienes activado la depuración de scripts, ok?

salu2
  #6 (permalink)  
Antiguo 18/01/2010, 10:16
Avatar de yoyoyo82  
Fecha de Ingreso: julio-2009
Ubicación: Springfield
Mensajes: 159
Antigüedad: 14 años, 9 meses
Puntos: 1
Respuesta: undefined en funcion

Muchjas gracias caballero no funciona quisa por que utilizo post en este formulario tendra algo que ver es que esta pagina es de actualizar registros originalmente y tengo que hacer calculos y luego guardar los cambios en la base de datos de alli que utilice name, ahora mi pregunta seria se puede utilizar getElementById en un formulario con post?
Marca error cuando meto el primer valor para hacer la primera resta
  #7 (permalink)  
Antiguo 18/01/2010, 10:34
Avatar de ceSharp  
Fecha de Ingreso: octubre-2008
Ubicación: Madrid
Mensajes: 495
Antigüedad: 15 años, 6 meses
Puntos: 66
Respuesta: undefined en funcion

bueno, otra opción es usar name e id. yo es que de PHP mucho no sé (nunca me he puesto con ello...soy de .NET)
Lo único que se me ocurre es eso; usa name e id (ambos con el mismo nombre). de esta manera te vale name para la parte de php e id para la parte de js.

Aún así si algún experto lee esto por Dios! que nos eche una mano! aunque sea al cuello! ;)

salu2
  #8 (permalink)  
Antiguo 18/01/2010, 10:39
Avatar de yoyoyo82  
Fecha de Ingreso: julio-2009
Ubicación: Springfield
Mensajes: 159
Antigüedad: 14 años, 9 meses
Puntos: 1
Respuesta: undefined en funcion

Ok perfecto amigo lo probare gracias jaja si una mano porfavor

Etiquetas: funcion, undefined
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:00.