2010-02-28 8 views
5

Ich muss das keyup-Ereignis erfassen, um eine Live-Validierung bereitzustellen, wenn der Benutzer eine Eingabe eingibt (change-Ereignis wird nur ausgelöst, wenn die Eingabe den Fokus verliert).JavaScript: Wie erhält man den Wert des Absender-Eingabeelements vom keyup-Ereignis?

Ich habe Probleme, den bearbeiteten Wert der Eingabe zu erhalten, die evnt ausgelöst hat.

Der Code wird auch auf Timer ausgeführt, um mehrere Anrufe zu verhindern, wenn der Benutzer tippt (wird nur alle 500 ms ausgelöst).

Ich habe mehrere Eingänge mit Klasse „priceinput“ und fügen Sie Ereignis jedes wie folgt keyUp:

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

den Absender Eingangswert zu erhalten, habe ich $(this).val versucht, this.val(), e.target.val() aber keiner scheint zu Arbeit.

Wie bekomme ich den Wert der Absendereingabe?

Antwort

6

Das Problem ist, dass Sie in Ihrer Timeout-Funktion den "dieser" Verweis auf das Eingabeelement verloren haben. Probieren Sie etwas wie folgt aus:

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

+1 Dies ist ein sehr häufiges Muster, wenn sie mit Timeouts und Rückrufe zu tun. Beachten Sie auch, dass als spitze Shows das .each() nicht benötigt wird, jquery behandelt es intern. –

+0

Nur eine Anmerkung für Leute, die sich über den $ sign in ** $ -Eingabe ** wundern: es ist Teil des Variablennamens und in diesem Fall wird es verwendet, um darauf hinzuweisen, dass die Variable ein jQuery-Objekt ist. Sehen Sie [hier] (http://stackoverflow.com/questions/205853/why-would-a-javascript-variable-start-with-a-dollar-sign) für Details. – rob74

1

In Internet Explorer sollte es event.srcElement, in Firefox event.target sein.
Oder versuchen Sie event.toElement und event.relatedTarget.

(und natürlich auch kombinieren sie mit .value oder .val())

Verwandte Themen