Foros del Web » Programando para Internet » Javascript »

Cambiar evento OnKeyPress según OnClick

Estas en el tema de Cambiar evento OnKeyPress según OnClick en el foro de Javascript en Foros del Web. Hola! Tengo un problema con el evento OnKeyPress... Lo que tengo: - Un Combo List con Nacionalidad. - Un Input con ID. Lo que deseo ...
  #1 (permalink)  
Antiguo 30/06/2009, 21:31
Avatar de Jacke87  
Fecha de Ingreso: junio-2009
Mensajes: 2
Antigüedad: 14 años, 10 meses
Puntos: 0
Exclamación Cambiar evento OnKeyPress según OnClick

Hola!

Tengo un problema con el evento OnKeyPress...

Lo que tengo:

- Un Combo List con Nacionalidad.
- Un Input con ID.

Lo que deseo hacer:

- Al elegir Nacionalidad V - (Venezolano(a)) el Input sólo aceptará números.
- Al elegir Nacionalidad E - (Extranjero(a)) el Input sólo aceptará letras.

El problema:

Al inicio el input sólo acepta números (bien!), al elegir E -, acepta letras, números, símbolos (), y al cambiar de nuevo a V -, acepta letras, números, símbolos ().

No consigo el error, tengo WebDeveloper y Firebug instalados en Firefox y no me reportan errores.

Por favor, agradezco cualquier aporte. Aquí dejo el código.

El código:

**En el combolist:

Código:
<option value="V" selected="selected" onclick="changeNum()">V - </option>
<option value="E" onclick="changeLet()">E - </option>
**En el input:

Código:
<input type="text" name="prof_cod" id="prof_cod" title="*Coloque número de Cédula de Identidad o Pasaporte" class="required" onKeyPress="return Num(event)" />
**Funciones changeNum() y changeLet():

Código:
function changeNum() {
	document.getElementById("prof_cod").value="";
	document.getElementById("prof_cod").onkeypress="return Num(event)";
}
function changeLet(){
	document.getElementById("prof_cod").value="";
	document.getElementById("prof_cod").onkeypress="return Let(event)";
}
**Funciones Num(event) y Let(event):

Código:
//Sólo letras
function Let(e) { 
    tecla = (document.all) ? e.keyCode : e.which;
    if (tecla==8 || tecla==0) return true;
    patron = /[A-Za-z]/; 
    te = String.fromCharCode(tecla); 
    return patron.test(te); 
}

//Sólo números
function Num(b){    
	// NOTE: Backspace = 8, Enter = 13, '0' = 48, '9' = 57    
	tecla = (document.all) ? b.keyCode : b.which;
	if (tecla==8||tecla==0) return true;
	patron =/[0-9]/; 
    te = String.fromCharCode(tecla); 
    return patron.test(te); 
}
  #2 (permalink)  
Antiguo 30/06/2009, 23:04
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Cambiar evento OnKeyPress según OnClick

no he intentado el codigo pero haz los siguientes cambios:
- primero, creo que no todos los navegadores admite eventos para los elementos HTMLOptions por lo cual lo correcto es utilizar onchange en elementos HTMLSelect. en este evento llamaras una de las funciones, changeNum o changeLet segun la seleccion:
Código:
<select onchange="
if(this.value == 'V')changeNum();
else changeLet();
">
...
</select>
- segundo, la declaracion de los eventos onkeypress estan mal formado. los evento no son mas que otra cosa que funciones, o bien metodos de un elemento, con la particular caracteristica de que se ejecutan cuando cierta accion sucede. suele ser confuso como se declara un evento inline y eventos en el script. pues de momento se entiende que los eventos son string por estar contenido dentro de comillas simples o dobles, pero no es cierto para eventos declarados en el script:
Código:
declaracion inline
<input ... onkeypress="..." />

declaracion en un script
document.getElementById("prof_cod").onkeypress="return Num(event)";
en el segundo caso, estas asignando literalmente un string al evento onkeypress el cual produce nada, pues un string es un string, no una funcion que luego se ejecuta. el siguiente codigo es una de las alternativas para declarar un evento:
Código:
document.getElementById("prof_cod").onkeypress= function(evt){
var evt = evt || event;
return Num(evt);
}
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 01/07/2009, 08:16
Avatar de Jacke87  
Fecha de Ingreso: junio-2009
Mensajes: 2
Antigüedad: 14 años, 10 meses
Puntos: 0
De acuerdo Respuesta: Cambiar evento OnKeyPress según OnClick

Hola zerokilled!

Muchísimas gracias! solo cambié las funciones changeNum() y changeLet(), quedando así:

Código:
function changeNum() {
	document.getElementById("prof_cod").value="";
	document.getElementById("prof_cod").onkeypress=function Num(b){    
	// NOTE: Backspace = 8, Enter = 13, '0' = 48, '9' = 57    
	tecla = (document.all) ? b.keyCode : b.which;
	if (tecla==8||tecla==0) return true;
	patron =/[0-9]/; 
    te = String.fromCharCode(tecla); 
    return patron.test(te); 
}
}

function changeLet(){
	document.getElementById("prof_cod").value="";
	document.getElementById("prof_cod").onkeypress=function Let(e) { 
    tecla = (document.all) ? e.keyCode : e.which;
    if (tecla==8 || tecla==0) return true;
    patron = /[A-Za-z]/; 
    te = String.fromCharCode(tecla); 
    return patron.test(te); 
}
}
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 16:07.