Foros del Web » Programando para Internet » Javascript »

ejecutar una funcion con addEventListener

Estas en el tema de ejecutar una funcion con addEventListener en el foro de Javascript en Foros del Web. Hola amigas/os, veran tengo un problemilla, tengo un codigo que funciona en dos archivos. En el archivo 1: Tengo en un formulario un campo input ...
  #1 (permalink)  
Antiguo 16/03/2016, 10:13
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 12 años
Puntos: 5
ejecutar una funcion con addEventListener

Hola amigas/os, veran tengo un problemilla, tengo un codigo que funciona en dos archivos.

En el archivo 1: Tengo en un formulario un campo input asi:

Código HTML:
Ver original
  1. <form bla bla bla>
  2.  
  3. <input type="text" name="nombre" id="Nombre" onkeypress="return miClaseValidar.alfaNumerico(event, 'car');" />
  4.  
  5. </form>


Este archivo 1, hace una llamada a una funcion en archivo 2 que me permite solo meter letras o numeros (segun configure la funcion).

En el archivo 2 hay:

Código Javascript:
Ver original
  1. var miClase = {
  2.  
  3.      alfaNumerico: function (elEvento, permitidos) {
  4.  
  5. bla bla bla
  6.  
  7. }
  8.  
  9. } //fin de miClase

Como digo todo funciona bien, pero lo que necesito es que la llamada a la funcion sea algo asi como:

Código Javascript:
Ver original
  1. document.getElementById("Nombre").addEventListener("keypress",  miClase.alfaNumerico, false);


Ya se que esta linea de codigo que he puesto esta mal, pero la pongo para que se entienda lo que necesito. es decir

que el codigo javascript esté en un archivo solo y no esté mezclado en el input del formulario.

y de esta manera solo capturando el id del input del formulario poder ejercutar la funcion del archivo 2.


Pero no se como hacerlo no me funciona.

agradeceria cualquier ayuda.

gracias.
  #2 (permalink)  
Antiguo 16/03/2016, 12:58
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: ejecutar una funcion con addEventListener

Como necesitas pasarle argumentos al método, tienes que ejecutar la función anónima manejadora y dentro de ella deberás ejecutar la llamada al método:
Código Javascript:
Ver original
  1. document.getElementById("Nombre").addEventListener("keypress", function(event){
  2.     miClase.alfaNumerico(event, "car");
  3. }, false);

__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 17/03/2016, 02:50
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 12 años
Puntos: 5
Respuesta: ejecutar una funcion con addEventListener

Gracias Alexis88, la verdad es que desconocía lo de la función anónima manejadora para solucionar esto.

Pero sigue sin funcionar, no entiendo la razón.

Mejor te pongo tal y como lo tengo a ver si me puedes guiar mas exactamente, mira:

En el archivo 1 (donde está el formulario):

Código HTML:
Ver original
  1. <form name="formularioRegistrarse" id="formularioRegistrarse" method="post"
  2.        
  3.        action="opcs/opc_registro/validar_formulario_registrarse.php">
  4.                
  5.            
  6.                 <input type="text" name="nombre" id="Nombre" placeholder="Nombre" />
  7.  
  8.                 <!--onkeypress="return miClaseValidar.alfaNumerico(event, 'car');"-->
  9.  
  10.         </form>


En el archivo 2 tengo:

Código Javascript:
Ver original
  1. document.getElementById("Nombre").addEventListener("keypress", function(event){
  2.         miClaseValidar.alfaNumerico(event, "car");
  3.     }, false);
  4.  
  5.  
  6. var miClaseValidar = {
  7.  
  8. /*PERMITIR A ALGUNAS CAJAS ADMITIR VALORES NUMERICOS, LETRAS O AMBAS COSAS.........................*/
  9.  
  10.      alfaNumerico: function (elEvento, permitidos) {
  11.        
  12.           // Variables que definen los caracteres permitidos
  13.           var numeros = "0123456789";
  14.           var caracteres = "abcdefghijklmnñopqrstuvwxyzABCDEFGHIJKLMNÑOPQRSTUVWXYZ";
  15.           var caracteres_espacio = " abcdefghijklmnñopqrstuvwxyzABCDEFGHIJKLMNÑOPQRSTUVWXYZ";
  16.           var caracteresPlus = "abcdefghijklmnñopqrstuvwxyzABCDEFGHIJKLMNÑOPQRSTUVWXYZ@-_";
  17.              
  18.           var numeros_caracteres = numeros + caracteres;
  19.           var caracteres_espacio = caracteres_espacio; 
  20.           var numeros_caracteres_plus = numeros + caracteres + caracteresPlus;           
  21.           var teclas_especiales = [8, 37, 39, 46];
  22.           // 8 = BackSpace, 46 = Supr, 37 = flecha izquierda, 39 = flecha derecha
  23.         *
  24.        
  25.           // Seleccionar los caracteres a partir del parámetro de la función
  26.           switch(permitidos) {
  27.             case 'num':
  28.               permitidos = numeros;
  29.               break;
  30.              
  31.             case 'car':
  32.               permitidos = caracteres;
  33.               break;
  34.              
  35.             case 'num_car':
  36.               permitidos = numeros_caracteres;
  37.               break;
  38.  
  39.             case 'car_espacio':
  40.               permitidos = caracteres_espacio;
  41.               break;
  42.  
  43.             case 'num_car_plus':
  44.               permitidos = numeros_caracteres_plus;
  45.               break;             
  46.           }
  47.         *
  48.           // Obtener la tecla pulsada
  49.           var evento = elEvento || window.event;
  50.           var codigoCaracter = evento.charCode || evento.keyCode;
  51.           var caracter = String.fromCharCode(codigoCaracter);
  52.         *
  53.           // Comprobar si la tecla pulsada es alguna de las teclas especiales
  54.           // (teclas de borrado y flechas horizontales)
  55.           var tecla_especial = false;
  56.           for(var i in teclas_especiales) {
  57.             if(codigoCaracter == teclas_especiales[i]) {
  58.               tecla_especial = true;
  59.               break;
  60.             }
  61.           }
  62.         *
  63.           // Comprobar si la tecla pulsada se encuentra en los caracteres permitidos
  64.           // o si es una tecla especial
  65.           return permitidos.indexOf(caracter) != -1 || tecla_especial;
  66.          
  67.     } //fin function alfaNumerico  
  68.  
  69. } //fin de miClaseValidar
  #4 (permalink)  
Antiguo 17/03/2016, 05:59
 
Fecha de Ingreso: junio-2004
Mensajes: 621
Antigüedad: 19 años, 11 meses
Puntos: 25
Respuesta: ejecutar una funcion con addEventListener

Cuando estás registrando el listener del evento, aún no está definido el objeto miClaseValidar.

Prueba a definir antes el objeto y luego a registrar el manejador del evento.

Un saludo
__________________
eContento
- Mis artículos y tutoriales
- Mis jsfiddles
  #5 (permalink)  
Antiguo 17/03/2016, 06:08
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 12 años
Puntos: 5
Respuesta: ejecutar una funcion con addEventListener

Acabo de probar a poner esto:

Código Javascript:
Ver original
  1. document.getElementById("Nombre").addEventListener("keypress", function(event){
  2.         miClaseValidar.alfaNumerico(event, "car");
  3.     }, false);

justo despues de la clase, pero sigue sin funcionar (( help!!!
  #6 (permalink)  
Antiguo 17/03/2016, 09:25
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: ejecutar una funcion con addEventListener

Quizá se deba a que incluyes al archivo JS antes del cuerpo del documento. Como el código se ejecuta desde arriba hacia abajo, al no estar definidos los elementos del documento, la línea de código en la que tomas al elemento por su identificador, no surte efecto alguno.

Para evitar esto, tienes dos opciones: incluye al archivo JS justo antes de la etiqueta </body>, es decir, después de todos los elementos del documento o cuando estos hayan cargado, para lo cual necesitas utilizar el evento DOMContentLoaded:
Código Javascript:
Ver original
  1. document.addEventListener("DOMContentLoaded", function(){
  2.     //Todo el código JS en donde interactues con los elementos del documento
  3. }, false);

Un saludo
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #7 (permalink)  
Antiguo 17/03/2016, 10:13
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 12 años
Puntos: 5
Respuesta: ejecutar una funcion con addEventListener

Alexis que desesperacion llevo, ufff, he puesto en el archivo 1 donde esta el formulario, el enlace al archivo 2 .js , al final osea justo antes del </body>. Y nada no funciona.

Si está todo bien puesto y siguiendo cada punto como me lo has dicho, como es que no funciona?

No lo entiendo.
Me gustaria que hubiera un problema grande pero saber que tocar para arreglarlo, que tener un problema pequeño pero no saber por donde arreglarlo, como es este caso.

Por que no se que voy ha hacer ya.
por mas que reviso el codigo lo veo todo bien.
  #8 (permalink)  
Antiguo 17/03/2016, 10:56
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: ejecutar una funcion con addEventListener

¿Aparece algún mensaje de error en la consola del navegador?
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #9 (permalink)  
Antiguo 17/03/2016, 12:06
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 12 años
Puntos: 5
Respuesta: ejecutar una funcion con addEventListener

umm, no, no aparece ningun mensaje.
  #10 (permalink)  
Antiguo 17/03/2016, 12:13
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: ejecutar una funcion con addEventListener

Lo único que se me ocurre es usar preventDefault() para evitar el evento. En principio haría lo mismo que el return que usas en la asignación del evento en línea
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #11 (permalink)  
Antiguo 17/03/2016, 12:53
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: ejecutar una funcion con addEventListener

No me había fijado en ese detalle. Creí que estaba ejecutando una función cualquiera, pero sí; además, ahora que veo el código del método, ¿por qué haces esto?, mensajeescrito:

Código Javascript:
Ver original
  1. var caracteres_espacio = " abcdefghijklmnñopqrstuvwxyzABCDEFGHIJKLMNÑOPQRSTUVWXYZ";
  2. var caracteres_espacio = caracteres_espacio;

__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Etiquetas: addeventlistener, formulario, funcion, input
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 23:35.