2012-05-14 9 views
5

Soy un novato en JS, tengo un problema para entender la semántica de JQUERY.jquery beginner - función para iniciar por tiempo

Tengo una función escrita para verificar el contenido de una celda.

Problema: la función solo comienza cuando la celda pierde el foco, si hago clic en Enviar, el error aparece primero, luego ejecutará la función.

Quiero que la función se ejecute incluso cuando estoy dentro de la celda. ¿Cómo hacerlo?

Iniciado por esto:

$(".user_id").blur(function(){ validateUserId($('.user_id')); }); 

La función:

function validateUserId(reference) { 
    if (5 == $(reference).val().length) { 
     $.get('index.php?user=' + $(reference).val(), function(data) { 
      if ("error" == data) { 
       $(reference).parent().parent().addClass('error'); 
       alert('error'); 
      } else { 
       $(reference).parent().parent().removeClass('error'); 
       $(reference).addClass('valid'); 
       $(reference).parent().parent().addClass('success'); 
      } 
     }); 
    } else { 
     alert('short'); 
     $(reference).parent().parent().addClass('error'); 
    } 
} 
+0

¿Quieres decir cuando escribes algo? – VisioN

+0

el HTML subyacente también sería interesante, no estoy muy seguro de lo que quiere lograr ... – Peter

+0

¿Quizás pueda usar la tecla? $ (". user_id"). keyup (function() {validateUserId ($ ('. user_id'));}); –

Respuesta

0

intenta enlazar la función de evento de foco

+3

No no no no no ... – VisioN

4
$(".user_id").on('keyup', function(){ 
    validateUserId($(this)); 
}); 
1

, lo usaría el evento keyup. Así que cada vez que alguien escribe una clave en su celda de entrada, la función se ejecutará.

$(".user_id").on("keyup", function(){ validateUserId($(this)); }); 

he cambiado el $ ("user_id"), se toma el valor de, al $ (este). Como desea el valor del campo en el que realizó el evento de activación de teclado. (Y no otro campo, si habría 2 campos con la misma clase .user_id.)

0
$("input[submit]").click(function(e){ 
    e.preventDefault(); 
    var valid = validateUserId($('.user_id')); // maybe the function could return a boolean value too instead of just adding classes to the HTML part 
    if (valid) { 
     $("#your_form_id").submit(); // only if the input is valid, submit it 
    } 
}); 

anotación al margen de su problema: si hace clic en el botón de envío que será primera desencadenar la acción que puede dar que presenten un error y luego ejecutar el bloque de código blur()

0

Aquí es una demostración de trabajo http://jsfiddle.net/pomeh/GwswM/. He reescrito un poco el código para:

  • selecciones caché en variables de DOM,
  • uso jQuery métodos de encadenamiento,
  • mejoran las condiciones if con callos signos iguales,
  • separado llamadas AJAX y lógica de la aplicación ,
  • caché idéntica llamadas AJAX,
  • uso jQuery deferred para ocultar el aspecto asíncrona de la verificación (vinculado a AJAX)

Espero que ayude :)

Cuestiones relacionadas