2010-02-28 17 views
5

Necesito capturar el evento de teclado para proporcionar validación en vivo cuando el usuario está escribiendo en una entrada (el evento de cambio se dispara solo cuando la entrada pierde el foco).JavaScript: ¿Cómo obtener el valor del elemento de entrada del remitente desde el evento keyup?

Tengo problemas para obtener el valor editado de la entrada que activó el evnt.

El código también se ejecuta en el temporizador para evitar múltiples llamadas cuando el usuario está escribiendo (dispara cada 500 ms).

tengo varias entradas con clase "priceinput" y se unen a keyUp caso de cada uno como el siguiente:

<script language="javascript" type="text/javascript"> 
    var timer; 
    $(document).ready(function() 
    { 
     $(".priceinput").each(function() 
     { 
      $(this).keyup(function(e) 
      { 
       clearTimeout(timer); 
       timer = setTimeout(function() 
       {  
       //how to get the value of the input element that was changed? 
       var value = ???; 
        $.getJSON('/Validator/IsValidInput', { input: value }, 
        function(response) 
        { 
         //indicate if input is correct 
        }); 
       }, 500); 
      }); 
     }); 
    }); 
</script> 

Para obtener el valor de entrada del remitente, he tratado $(this).val, this.val(), e.target.val() pero ninguno parece trabajo.

¿Cómo obtengo el valor de la entrada del remitente?

Respuesta

6

El problema es que en su función de tiempo de espera, ha perdido la referencia "this" al elemento de entrada. Intentar algo como esto:

$('.priceinput').keyup(function(e) { 
    var $input = $(this); 
    clearTimeout(timer); 
    timer = setTimeout(function() { 
    var value = $input.val(); 
    $.getJSON(...); 
    }, 500); 
}); 
+2

1 Este es un patrón muy común cuando se trata de tiempos de espera y las devoluciones de llamada. También tenga en cuenta que, como muestra puntiagudo, el .each() no es necesario, jquery lo maneja internamente. –

+0

Solo una nota para las personas que se preguntan acerca del $ sign in ** $ input **: es parte del nombre de la variable y en este caso se usa para indicar que la variable es un objeto jQuery. Ver [aquí] (http://stackoverflow.com/questions/205853/why-would-a-javascript-variable-start-with-a-dollar-sign) para más detalles. – rob74

1

En Internet Explorer debe ser event.srcElement, en Firefox event.target.
O pruebe event.toElement y event.relatedTarget.

(y por supuesto combinarlos con .value o .val())

Cuestiones relacionadas