Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JavaScript: How to get value of sender input element from keyup event?

I need to capture the keyup event to provide live validation when user is typing in an input (change event fires only when the input loses focus).

I am having trouble getting the edited value of the input that fired the evnt.

The code also runs on timer to prevent multiple calls when user is typing (fires only every 500 ms).

I have several inputs with class "priceinput" and attach to keyup event of each like the following:

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

To get the sender input value, I have tried $(this).val, this.val(), e.target.val() but none seem to work.

How do I get the value of the sender input?

like image 814
Marek Avatar asked Feb 28 '10 16:02

Marek


People also ask

Can we get element by value in Javascript?

Use getElementsByTagName (defined in DOM) to get a list of all input tags, and then filter them in Javascript code (looking at their value attribute).

What is the use of Keyup event in Javascript?

The keyup event is fired when a key is released. The keydown and keyup events provide a code indicating which key is pressed, while keypress indicates which character was entered.


1 Answers

The problem is that in your timeout function, you've lost the "this" reference to the input element. Try something like this:

$('.priceinput').keyup(function(e) {
  var $input = $(this);
  clearTimeout(timer);
  timer = setTimeout(function() { 
    var value = $input.val();
    $.getJSON( ... );
  }, 500);
});
like image 90
Pointy Avatar answered Sep 30 '22 17:09

Pointy