2010-02-28 7 views
5

Potrzebuję przechwycić zdarzenie keyup, aby zapewnić poprawność na żywo, gdy użytkownik wpisuje dane wejściowe (zmiana zdarzenia jest wywoływana tylko wtedy, gdy dane wejściowe tracą ostrość).JavaScript: Jak uzyskać wartość elementu wejściowego nadawcy ze zdarzenia kluczowania?

Mam problem z uzyskaniem edytowanej wartości danych wejściowych, które wywołały polecenie evnt.

Kod działa również na czasomierzu, aby zapobiec wielu połączeniom, gdy użytkownik wpisuje (uruchamia tylko co 500 ms).

mam kilka wejść z klasą „priceinput” i dołączyć do keyUp wydarzenie każdy tak:

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

Aby uzyskać wartość wejściową nadawca, próbowałem $(this).val, this.val(), e.target.val() ale nikt wydaje się praca.

Jak uzyskać wartość sygnału wejściowego nadawcy?

Odpowiedz

6

Problem polega na tym, że w funkcji limitu czasu utraciłeś odniesienie do "tego" elementu wejściowego. Spróbuj czegoś takiego:

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

+1 Jest to bardzo powszechne wzór w kontaktach z czasów oczekiwania i wywołania zwrotne. Zauważ, że jak pokazuje spiczasty, .each() nie jest wymagany, jquery obsługuje go wewnętrznie. –

+0

Tylko uwaga dla osób zastanawiających się nad znakiem $ ** ** input **: jest częścią nazwy zmiennej iw tym przypadku jest używana do wskazania, że ​​zmienna jest obiektem jQuery. Aby uzyskać szczegółowe informacje, patrz [tutaj] (http://stackoverflow.com/questions/205853/why-would-a-javascript-variable-start-with-a-dollar-sign). – rob74

1

W programie Internet Explorer powinien być event.srcElement, w Firefoksie event.target.
Lub spróbuj event.toElement i event.relatedTarget.

(i oczywiście połączyć je z .value lub .val())