Foros del Web » Programando para Internet » Javascript »

Eventos de teclado

Estas en el tema de Eventos de teclado en el foro de Javascript en Foros del Web. Hola, estoy intentando crear una calculadora y tengo un problema: Haciendo click a los botones funciona, pero cuando con el teclado escribes la operación y ...
  #1 (permalink)  
Antiguo 04/09/2012, 09:30
 
Fecha de Ingreso: mayo-2012
Ubicación: Barcelona
Mensajes: 15
Antigüedad: 12 años
Puntos: 0
Eventos de teclado

Hola, estoy intentando crear una calculadora y tengo un problema:
Haciendo click a los botones funciona, pero cuando con el teclado escribes la operación y le das a Enter, la operación desaparece y no sale el resultado.
Lo que quiero es que al dar al Enter pase lo mismo que cuando le doy con el ratón en el botón de Resultado: que me muestre el resultado.
He estado mirando y el código de Enter con JavaScript es 13.
Les dejo el código haber si me pueden ayudar.
Gracias.

Código:
<html>
<head>
	<title>Calculadora</title>
		<link rel="stylesheet" type="text/css" href=".css">

	<!--Script Calculadora-->
	<script type="text/javascript">


	function addChar(input, character)
{
    if(input.value == null || input.value == "0")
        input.value = character
    else
        input.value += character
}

function deleteChar(input)
{
    input.value = input.value.substring(0, input.value.length - 1)
}

function changeSign(input)
{
    // could use input.value = 0 - input.value, but let's show off substring
    if(input.value.substring(0, 1) == "-")
	input.value = input.value.substring(1, input.value.length)
    else
	input.value = "-" + input.value
}

function compute(form) 
{
	form.display.value = eval(form.display.value)
}

function square(form) 
{
	form.display.value = eval(form.display.value) * eval(form.display.value)
}

function checkNum(str) 
{
	for (var i = 0; i < str.length; i++) {
		var ch = str.substring(i, i+1)
		if (ch < "0" || ch > "9") {
			if (ch != "/" && ch != "*" && ch != "+" && ch != "-" 
				&& ch != "(" && ch!= ")") {
				alert("invalid entry!")
				return false
			}
		}
	}
	return true
}

	</script>

</head>
<body>
<form>
<table border="5" align=center>
<tr align="center">
<td colspan = 4>

<table border="3">
<tr>
<td align=center>


<!--Input Resultado-->
<input name="display" value="" size=20 autofocus></td>
</tr>
</table>

</td>
</tr>

<tr align=center>
<td>
<input type="button" value="    7    "
  onClick="addChar(this.form.display, '7')">
</td>
<td>
<input type="button" value="    8    "
  onClick="addChar(this.form.display, '8')">
</td>
<td>
<input type="button" value="    9    "
  onClick="addChar(this.form.display, '9')">
</td>
<td>
<input type="button" value="    /     "
  onClick="addChar(this.form.display, '/')">
</td>
</tr>

<tr align=center>
<td>
<input type="button" value="    4    "
  onClick="addChar(this.form.display, '4')">
</td>
<td>
<input type="button" value="    5    "
  onClick="addChar(this.form.display, '5')">
</td>
<td>
<input type="button" value="    6    "
  onClick="addChar(this.form.display, '6')">
</td>
<td>
<input type="button" value="    *    "
  onClick="addChar(this.form.display, '*')">
</td>
</tr>

<tr align=center>
<td>
<input type="button" value="    1    "
  onClick="addChar(this.form.display, '1')">
</td>
<td>
<input type="button" value="    2    "
  onClick="addChar(this.form.display, '2')">
</td>
<td>
<input type="button" value="    3    "
  onClick="addChar(this.form.display, '3')">
</td>
<td>
<input type="button" value="     -    " 
  onClick="addChar(this.form.display, '-')">
</td>
</tr>

<tr align=center>
<td>
<input type="button" value="    0    "
  onClick="addChar(this.form.display, '0')"> 
</td>
<td>
<input type="button" value="     .    "
  onClick="addChar(this.form.display, '.')"> 
</td>
<td>
<input type="button" value="   +/-   "
  onClick="changeSign(this.form.display)">
</td>
<td>
<input type="button" value="    +    "
  onClick="addChar(this.form.display, '+')">
</td>
</tr>

<tr align=center>
<td>
<input type="button" value="    (    "
  onClick="addChar(this.form.display, '(')"> 
</td>
<td>
<input type="button" value="     )    "
  onClick="addChar(this.form.display, ')')"> 
</td>
<td>
<input type="button" value="   sq    "
  onClick="if (checkNum(this.form.display.value))
	{ square(this.form) }">
</td>
<td>
<input type="button" value="    <-   "
  onClick="deleteChar(this.form.display)">
</td>
</tr>

<tr align=center>
<td colspan="2">

<!--Botón de resultado-->
<input type="button" value="     Resultado      " name="enter"
  onClick="if (checkNum(this.form.display.value))
	{ compute(this.form) }">
</td>
<td colspan="2">
<input type="button" value="         C          "
  onClick="this.form.display.value = 0 ">
</td>
</tr>
</table>
</form>
</body>
</html>
  #2 (permalink)  
Antiguo 04/09/2012, 09:34
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Eventos de teclado

eso se debe a que por defecto el form se envía al presionar Enter, simplemente puedes evitarlo cancelando el envío del form:

<form onsubmit="return false;" >

y listo!
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 04/09/2012, 09:43
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 15 años, 10 meses
Puntos: 220
Respuesta: Eventos de teclado

Cita:
Iniciado por maycolalvarez Ver Mensaje
eso se debe a que por defecto el form se envía al presionar Enter, simplemente puedes evitarlo cancelando el envío del form:

<form onsubmit="return false;" >

y listo!
Pon un nombre a tu formulario name="frm"

y ademas de esto debes agregar esto en la linea de tu

<input name="display" value="" size=20 onkeypress="resulta(event)"/>

y esta función mas

Código Javascript:
Ver original
  1. function resulta(e){
  2.                 if(e.keyCode == 13){
  3.                     if (checkNum(document.forms["frm"]["display"].value)){ compute(document.forms["frm"]) }
  4.                 }
  5.             }
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #4 (permalink)  
Antiguo 04/09/2012, 10:01
 
Fecha de Ingreso: mayo-2012
Ubicación: Barcelona
Mensajes: 15
Antigüedad: 12 años
Puntos: 0
Respuesta: Eventos de teclado

Muchas gracias a los dos :)

Última edición por GuillemPejo; 06/09/2012 a las 09:04
  #5 (permalink)  
Antiguo 06/09/2012, 09:05
 
Fecha de Ingreso: mayo-2012
Ubicación: Barcelona
Mensajes: 15
Antigüedad: 12 años
Puntos: 0
Respuesta: Eventos de teclado

Cita:
Iniciado por Dradi7 Ver Mensaje
Pon un nombre a tu formulario name="frm"

y ademas de esto debes agregar esto en la linea de tu

<input name="display" value="" size=20 onkeypress="resulta(event)"/>

y esta función mas

Código Javascript:
Ver original
  1. function resulta(e){
  2.                 if(e.keyCode == 13){
  3.                     if (checkNum(document.forms["frm"]["display"].value)){ compute(document.forms["frm"]) }
  4.                 }
  5.             }

Muchísimas gracias, aunque me han surgido algunas dudas más:
Primero: ¿Como puedo bloquear las letras, de manera que solo puedas escribir número (y los operadores), en el input?
Y segundo: ¿Como puedo quitar el cursor del input para que no me salga parpadeando?
Gracias de nuevo
  #6 (permalink)  
Antiguo 06/09/2012, 09:06
 
Fecha de Ingreso: mayo-2012
Ubicación: Barcelona
Mensajes: 15
Antigüedad: 12 años
Puntos: 0
Respuesta: Eventos de teclado

Cita:
Iniciado por Dradi7 Ver Mensaje
Pon un nombre a tu formulario name="frm"

y ademas de esto debes agregar esto en la linea de tu

<input name="display" value="" size=20 onkeypress="resulta(event)"/>

y esta función mas

Código Javascript:
Ver original
  1. function resulta(e){
  2.                 if(e.keyCode == 13){
  3.                     if (checkNum(document.forms["frm"]["display"].value)){ compute(document.forms["frm"]) }
  4.                 }
  5.             }

Muchísimas gracias, aunque me han surgido algunas dudas más:

Primero:¿Como puedo bloquear las letras, de manera que solo puedas escribir número (y los operadores), en el input?

Y segundo: ¿Como puedo quitar el cursor del input para que no me salga parpadeando?

Gracias de nuevo

Disculpen me lo envió dos veces

Última edición por GuillemPejo; 06/09/2012 a las 09:11 Razón: Sin querer lo envíe dos veces.
  #7 (permalink)  
Antiguo 06/09/2012, 11:59
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 15 años, 10 meses
Puntos: 220
Respuesta: Eventos de teclado

Acomoda esta funcion a tu gusto con esto solo permites números

Código Javascript:
Ver original
  1. function validateNumber(e){
  2.     var evt = e.keyCode  ? e.keyCode : e.which;
  3.     if(evt == 13 || evt == 8 || evt == 9){
  4.         return true;
  5.     }
  6.     return isNumber(String.fromCharCode(evt));
  7. }
  8. function isNumber(value){
  9.     var regNumber = /[\d]/;
  10.     return regNumber.test(value);
  11. }
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #8 (permalink)  
Antiguo 06/09/2012, 13:12
 
Fecha de Ingreso: mayo-2012
Ubicación: Barcelona
Mensajes: 15
Antigüedad: 12 años
Puntos: 0
Respuesta: Eventos de teclado

Muchas gracias! (:

Etiquetas: calculadora, enter, evento, teclado
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 22:38.