Foros del Web » Programando para Internet » Jquery »

No sé como ejecutar código despues una función keyup

Estas en el tema de No sé como ejecutar código despues una función keyup en el foro de Jquery en Foros del Web. Hola, tengo una función que me comprueba el .keyup para actuar sobre un campo input. El problema es que después de esa función no se ...
  #1 (permalink)  
Antiguo 17/06/2013, 07:38
Avatar de kikerrobles  
Fecha de Ingreso: mayo-2013
Ubicación: Oviedo
Mensajes: 17
Antigüedad: 11 años, 7 meses
Puntos: 2
No sé como ejecutar código despues una función keyup

Hola, tengo una función que me comprueba el .keyup para actuar sobre un campo input. El problema es que después de esa función no se me ejecuta nada más.

Es decir, quisiera que esa función me devolviera un valor, y no lo consigo. De forma esquemática he creado este código, y no consigo que el alert() se ejecute después de cada pulsación de una tecla.

Código:
$(document).ready(function(){
	var hapulsado=pulsadatecla();
	function pulsadatecla(){
		var pulsada=0;
		$('#inputUserName').keyup(function(e){
			var value=e.which;
			console.log(value);
			pulsada=1;
			return false;
		});
		return pulsada; //este valor nunca lo obtengo
	}
	alert(hapulsado);//Nunca se ejecuta (salvo la primera vez al cargar la pantalla

});
Gracias.

Última edición por kikerrobles; 17/06/2013 a las 08:03 Razón: Simplificar el código de ejemplo
  #2 (permalink)  
Antiguo 17/06/2013, 10:24
Avatar de jrobinsonc  
Fecha de Ingreso: noviembre-2007
Ubicación: Santo Domingo
Mensajes: 34
Antigüedad: 17 años
Puntos: 2
Respuesta: No sé como ejecutar código despues una función keyup

Si entendí bien lo que quisiste dejar dicho, quieres que cuando el usuario presione una tecla se ejecute un alert. Si eso es lo que quieres lo correcto seria hacerlo de esta manera:

Código Javascript:
Ver original
  1. jQuery(document).ready(function($){
  2.    
  3.     $('#inputUserName').keyup(function(e){
  4.         var value=e.which;
  5.         console.log(value);
  6.         pulsada=1;
  7.        
  8.         alert(pulsada);
  9.     });
  10.    
  11. });

Aquí hice un ejemplo funcional que puedes ver:
http://jsfiddle.net/XukVH/
  #3 (permalink)  
Antiguo 17/06/2013, 10:35
Avatar de kikerrobles  
Fecha de Ingreso: mayo-2013
Ubicación: Oviedo
Mensajes: 17
Antigüedad: 11 años, 7 meses
Puntos: 2
Respuesta: No sé como ejecutar código despues una función keyup

No es eso, dentro de la función sé que puedo hacerlo. Lo que quiero es obtener un valor en esa función para poder usarlo después.

En mi código, sobre el que estoy trabajando, llamo a una función que me valida un campo usuario cada vez que se pulsa una tecla, y además comprueba si el usuario existe o no en la base de datos. Eso me funciona bien. Lo que quisiera es que esa función me retornara un valor de si el campo es válido o no, pero parece que queda en un bucle como el del ejemplo que puse y no sale de él. Es decir, en el ejemplo no me ejecuta ese alert() que en mí código podría ser recoger el valor 1 o 0 de si el campo es válido.
  #4 (permalink)  
Antiguo 17/06/2013, 13:10
Avatar de jrobinsonc  
Fecha de Ingreso: noviembre-2007
Ubicación: Santo Domingo
Mensajes: 34
Antigüedad: 17 años
Puntos: 2
Respuesta: No sé como ejecutar código despues una función keyup

Bueno, aquí hay un ejemplo de una función que devuelve si el campo esta vacío o no.
URL: http://jsfiddle.net/jrobinsonc/C2tub/3/

Cada vez que escribes en el campo se ejecuta una función que valida el campo, también hay un botón que ejecuta la validación.

Código Javascript:
Ver original
  1. jQuery(document).ready(function($){
  2.    
  3.     var $inputUserName = $('#inputUserName');
  4.    
  5.     function validate_field() {
  6.        
  7.         // Digamos que solo quiero validar si el campo esta vacio.
  8.         if ($inputUserName.val() === '') {
  9.             return 0;
  10.         } else {
  11.             return 1;
  12.         }
  13.     }
  14.    
  15.     // Valido el campo cada vez que se presione una tecla.
  16.     $('#inputUserName').keyup(function(e){
  17.         alert(validate_field());
  18.     });
  19.    
  20.     // Valido el campo cuando presione el boton "Validar!".
  21.     $('#validateBtn').click(function(e){
  22.         alert(validate_field());
  23.     });
  24.        
  25. });

Código HTML:
Ver original
  1. <input type="text" id="inputUserName" />
  2.  
  3. <input type="button" id="validateBtn" value="Validar!" />

De todas formas, revisate http://jqueryvalidation.org/, que es un plugin de jQuery que sirve para la validación de formularios, es la que uso siempre.
  #5 (permalink)  
Antiguo 18/06/2013, 02:44
Avatar de kikerrobles  
Fecha de Ingreso: mayo-2013
Ubicación: Oviedo
Mensajes: 17
Antigüedad: 11 años, 7 meses
Puntos: 2
Respuesta: No sé como ejecutar código despues una función keyup

Muchas gracias jrobinsonc. Como lo planteas sigo teniendo el mismo problema, el valor de si está o no validado sigo teniéndolo dentro de la función que maneja el evento.
No tengo problemas con la validación, tengo una función que según los parámetros que le meta me valida la expresión regular de cada campo y si es necesario me comprueba si ya existe en la base de datos. Como te comento, eso funciona. La función, muy, muy simplificada es como la que puse en el primer post.

Yo lo que necesito es poder tener esos valores 1 o 0 que retorna tu función validate_field fuera de las funciones keyup o click.

Supón que tengo 3 campos, y que hasta que no sean correctos los tres no quiero que el botón enviar se active.

Tendría que hacer una comparación del tipo:

Código Javascript:
Ver original
  1. Jquery(document ready){
  2.  
  3.     valido campo usuario
  4.     valido campo contraseña
  5.     valido campo email
  6.  
  7.     if usuario==validado and contraseña==validado and email==validado
  8.        activa boton enviar
  9.     else
  10.        el boton sigue desactivado
  11. }

Como te digo, valido bien los campos, pero he sido incapaz de que esas funciones me retornen un valor "validado" que sea uno o cero para poder usarlo fuera de las propias funciones de validación.

El problema es el que te comenté en el primer ejemplo que puse, donde la variable "pulsada" nunca llega a salir de la función y el alert(pulsada) nunca se ejecuta.
  #6 (permalink)  
Antiguo 18/06/2013, 05:25
Avatar de dvpareja  
Fecha de Ingreso: junio-2010
Ubicación: Vélez-Málaga
Mensajes: 126
Antigüedad: 14 años, 6 meses
Puntos: 11
Respuesta: No sé como ejecutar código despues una función keyup

Buenas
Con lo que te presento estás pasando el valor de la tecla pulsada a la función letras()

No sé si es lo que necesitabas

Código Javascript:
Ver original
  1. $(document).ready(function(){
  2.                 $('#inputUserName').keyup(function(e){
  3.                                 var value=letras(e.which);
  4.                                 return false;//no sale de este bucle
  5.                 });
  6. });
  7.                 function letras(valor){alert( valor );};

Y para validar el username podrías hacer

Código Javascript:
Ver original
  1. $(document).ready(function(){
  2.                 var value="";
  3.                 $('#inputUserName').keyup(function(e){
  4.                                 value = value+String.fromCharCode(e.which);
  5.                                 letras(value);
  6.                                 console.log(value);
  7.                                 return false;//no sale de este bucle
  8.                 });
  9. });
  10.                 function letras(valor){
  11.  
  12.                     alert( valor );
  13.                  
  14.                 };

Aunque habría que mejorar mucho ese código claro, para que solo capturara los caracteres válidos y permitiese borrar sin sumar :P

Última edición por dvpareja; 18/06/2013 a las 05:36
  #7 (permalink)  
Antiguo 18/06/2013, 06:11
Avatar de kikerrobles  
Fecha de Ingreso: mayo-2013
Ubicación: Oviedo
Mensajes: 17
Antigüedad: 11 años, 7 meses
Puntos: 2
Respuesta: No sé como ejecutar código despues una función keyup

Gracias dvpareja, el problema es el mismo, así ejecuto una función dentro de la otra, pero no tengo una variable fuera de keyup que evaluar, es decir, fuera del keyup en ese caso no podría tener la variable "value" que es la que me interesaría comparar.

Supongo que se haría con variables globlaes o con callbacks, pero toda las pruebas han fallado.

Buscaré una solución menos "global" y haré alguna función específica para cada campo o crearé un elemento input hidden con el resultado de la validación, por ejemplo, que luego pueda consultar.

Es más cutre pero sigo avanzando. Si surje la solución bienvenida sea ;)

Gracias.
  #8 (permalink)  
Antiguo 18/06/2013, 06:29
Avatar de dvpareja  
Fecha de Ingreso: junio-2010
Ubicación: Vélez-Málaga
Mensajes: 126
Antigüedad: 14 años, 6 meses
Puntos: 11
Respuesta: No sé como ejecutar código despues una función keyup

¿Cómo que no puedes?

Aquí hay algo que me pierde
Código Javascript:
Ver original
  1. var valorBueno="USERNAME";
  2.  
  3. $(document).ready(function(){
  4.                 var value="";
  5.                 $('#inputUserName').keyup(function(e){
  6.                                 value = value+String.fromCharCode(e.which);
  7.                                 letras(value);
  8.                                 console.log(value);
  9.                                 return false;//no sale de este bucle
  10.                 });
  11. });
  12.                 function letras(valor){
  13.                      if (valor==valorBueno) {
  14.                           alert( valor );
  15.  
  16.                      }
  17.                 };
  #9 (permalink)  
Antiguo 18/06/2013, 16:25
Avatar de jrobinsonc  
Fecha de Ingreso: noviembre-2007
Ubicación: Santo Domingo
Mensajes: 34
Antigüedad: 17 años
Puntos: 2
Respuesta: No sé como ejecutar código despues una función keyup

Quizás puedas explicarnos mejor el escenario para entender que es lo que tienes y que es lo que quieres lograr, así podemos darte una mejor respuesta.

Según lo que escribiste quieres una variable para evaluarla fuera del evento keyup, pero no entiendo por que ni para que y así no puedo ofrecerte una solución.
  #10 (permalink)  
Antiguo 20/06/2013, 09:27
Avatar de kikerrobles  
Fecha de Ingreso: mayo-2013
Ubicación: Oviedo
Mensajes: 17
Antigüedad: 11 años, 7 meses
Puntos: 2
Respuesta: No sé como ejecutar código despues una función keyup

Perdona la demora, empecé ayer a escribir y hasta ahora no he podido concluir :)

Me gustan las funciones simplificadas y reutilizables, de ahí que ciertas comprobaciones las quisiera hacer fuera de la función o funciones a las que llamo.

Lo que estoy haciendo es bastante sencillo, es para el registro de usuarios. Inicialmente tengo tres campos visibles: Usuario, Email y Contraseña

Con cada pulsación de tecla en cada campo compruebo si el campo cumple con la expresión regular correspondiente y en el caso del Usuario y el Email si ya existe o no en la base de datos.

Hasta ahí bien.

Pero luego, si esos campos son todos válidos, quiero que me muestre el resto del formulario sin necesidad de pulsar un botón. Lo he conseguido sin problemas metiendo una función que virifica los resulados dentro de la función de validación, pero me gustaría no haber tenido que meter funciones adicionales pues ya no me sirve para reutilizarlo y queda menos estructurado y claro. Además me ha obligado a usar ajax síncrono.

De momento, dado que voy mal de tiempo lo dejaré así. Ya funciona mostrando más formulario si todo es correcto y en caso de que vuelvan atrás y cambién algún resultado se vuelve a ocultar hasta tener los datos básicos correctos.

Para poder validar, como no podía poner variables que me perduraran, lo que actualmente hago es comprobar que en el div donde muestro "Válido" o "Inválido" aparezca Válido en cada uno de los campos. Menos elegante pero funciona.

No me parezca que tenga solución (usando variables) porque al final siempre dependo de un evento para saber cuando validar.

El código es básicamente este:
Código Javascript:
Ver original
  1. $(document).ready(function(){
  2.                
  3. //valido los campos
  4.                 validateAll('inputUserName','divResultUserName',user_regexp,result_user,"user");
  5. validateAll("inputPass","divResultPass",pass_regexp,result_pass,"pass");
  6. validateAll('inputEmail','divResultEmail',email_regexp,result_email,"email");
  7. validateAll('inputCode','divResultCode','',result_code,"code");
  8.  
  9. //activo la posibilidad de mostrar la contraseña, en registro.css se define como background bombilla_cara_apagada.png
  10. showHidePass("showPass","inputPass","bombilla_cara_apagada.png","bombilla_cara_encendida.png");
  11.  
  12. //Valido el código que el usuario recibe por email, validando así el correo y sirciendo a la vez de captcha             getCode("buttonCode","inputEmail","inputUserName","divResultCode");
  13.  
  14. //Esta función es la que tengo incluida en la "validateAll()", al final de la misma, en vez de poder llamarla desde aquí, pero como te comento, también quedaría dependiente de un evento para que se ejecute en cada camvio producido en uno de los campos
  15. //veryfyAllOutputs("divCode");
  16.                
  17. });

Así que te agradezco las molestias. Andaré por aquí respondiendo y preguntando más cosillas seguro. Hace mucho que no tengo que encargarme solo desde el diseño a la depuración en un proyecto tan grande y me está costando un poco ponerme al día en todos los lenguajes a la vez.

Etiquetas: event, salir
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:22.