2010-02-28 8 views
5

È necessario acquisire l'evento keyup per fornire la convalida live quando l'utente digita un input (l'evento change viene attivato solo quando l'input perde lo stato attivo).JavaScript: come ottenere il valore dell'elemento di input del mittente dall'evento keyup?

Non riesco a ottenere il valore modificato dell'input che ha generato l'evnt.

Il codice viene eseguito anche su timer per impedire più chiamate quando l'utente sta digitando (si attiva solo ogni 500 ms).

Ho diversi ingressi con classe "priceinput" e attribuisco alla KeyUp eventi di ogni simile al seguente:

<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> 

Per ottenere il valore di ingresso del mittente, ho cercato $(this).val, this.val(), e.target.val() ma nessuno sembra lavoro.

Come si ottiene il valore dell'ingresso del mittente?

risposta

6

Il problema è che nella funzione di timeout è stato perso il riferimento "questo" all'elemento di input. Provare qualcosa di simile:

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

+1 Questo è un modello molto comune quando si tratta di timeout e callback. Si noti inoltre che, come illustrato a punta, non è necessario .each(), jquery lo gestisce internamente. –

+0

Solo una nota per le persone che si interrogano sull'accesso $ ** $ input **: fa parte del nome della variabile e in questo caso viene utilizzato per indicare che la variabile è un oggetto jQuery. Vedi [qui] (http://stackoverflow.com/questions/205853/why-would-a-javascript-variable-start-with-a-dollar-sign) per i dettagli. – rob74

1

In Internet Explorer dovrebbe essere event.srcElement, in Firefox event.target.
Oppure prova event.toElement e event.relatedTarget.

(e naturalmente combinarli con .value o .val())

Problemi correlati