Foros del Web » Programando para Internet » Javascript »

Ayuda con calculadora, please

Estas en el tema de Ayuda con calculadora, please en el foro de Javascript en Foros del Web. hola, tengo este codigo para la calculadora, pero no consigo controlar la entrada obligatoria de los dos operandos y que los valores introducidos sean numéricos, ...
  #1 (permalink)  
Antiguo 24/08/2005, 01:05
 
Fecha de Ingreso: agosto-2005
Mensajes: 17
Antigüedad: 18 años, 8 meses
Puntos: 0
Ayuda con calculadora, please

hola, tengo este codigo para la calculadora, pero no consigo controlar la entrada obligatoria de los dos operandos y que los valores introducidos sean numéricos, en caso contrario hay que mostrar un mensaje de error al pulsar cualquiera de los botones de operación:
(+, -, *, /).
Tampoco consigo que el botón “Salir” cierre la página pidiendo confirmación de salida. Gracias



<script>
function cierraVentana(){
res=window.confirm("¿Estás seguro de querer cerrar la ventana?");
if (res){
window.close();
}
}

</script>

<script>
function validanum(){
var key=window.event.keyCode;//codigo de tecla.
if (key < 48 || key > 57){//si no es numero
window.event.keyCode=0;//anula la entrada de texto.
}
}
</script>
<script>
function calcula(operacion){
var operando1 = document.calc.operando1.value
var operando2 = document.calc.operando2.value
var result = eval(operando1 + operacion + operando2)
document.calc.resultado.value = result
}
</script>
</HEAD>

<BODY>
<form name="calc">
<TABLE width="60%" cellspacing="2" cellpadding="2" border="3">
<TR>
<TD width="180">Operando 1:</TD>
<TD width="180"><input type="Text" name="operando1" size="20"></TD>
<TD width="180"><input type="Button" name="" value=" + " onclick="calcula('+')"></TD>
</TR>
<TR>
<TD width="180">Operando 2:</TD>
<TD width="180"><input type="Text" name="operando2" size="20"></TD>
<TD width="180"><input type="Button" name="" value=" - " onclick="calcula('-')"></TD>
</TR>
<TR>
<TD width="180">Resultado:</TD>
<TD width="180"><input type="Text" name="resultado" onKeyPress="validanum()" size="12"></TD>
<TD width="180"> <input type="Button" name="" value=" x " onclick="calcula('*')"></TD>
</TR>
<TR>
<TD width="180"><input type="button" value="Cerrar" onclick="cierraventana()"> </td>
<TD width="180"><input type="reset" value="Borrar los Datos"></TD>
<TD width="180"><input type="Button" name="" value=" / " onclick="calcula('/')"> </TD>
</TR>
</TABLE>
</form>
</BODY>
  #2 (permalink)  
Antiguo 24/08/2005, 04:14
 
Fecha de Ingreso: agosto-2004
Mensajes: 51
Antigüedad: 19 años, 8 meses
Puntos: 0
Hola.

No sé si entiendo bien cómo quieres que te funcione la calculadora. ¿Quieres que la comprobación de que los campos sean numéricos se haga al pulsar alguno de los botones (o sea, después de haber permitido que se introduzcan datos erróneos)? En ese caso, puedes utilizar la función isNaN para ver si la variable es numérica o no (Is Not a Number). Con esto, la función calcula quedaría así:


Código PHP:
function calcula(operacion){
    var 
operando1 document.calc.operando1.value;
    var 
operando2 document.calc.operando2.value;
    if ( 
isNaN(operando1) || isNaN(operando2) ) {
        
alert ("Error: uno de los operandos no es numérico");
    } else {
        var 
result = eval(operando1 operacion operando2);
        
document.calc.resultado.value result;
    }

Si lo que quieres es que no se pueda escribir nada más que números en las cajas de texto de los operandos (creo que sería lo más efectivo), lo único que tendrías que hacer es añadir la validación que haces con validanum en el evento onKeyPress de las cajas de texto de los operandos:

Código PHP:
<input type="Text" name="operando1" onKeyPress="validanum()" size="20">
<
input type="Text" name="operando2" onKeyPress="validanum()" size="20"
En cualquier caso, poner la validación en la caja del resultado no te va a valer de mucho puesto que se supone que ahí nunca se va a escribir.

Espero que te sirva. Un saludo

P.D. Por cierto, la manera de capturar la tecla pulsada (que haces en validanum) no funciona con Firefox.
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 11:44.