开发者

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

开发者 https://www.devze.com 2022-12-21 17:37 出处:网络
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 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?


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);
});


In Internet Explorer it should be event.srcElement, in Firefox event.target.
Or try event.toElement and event.relatedTarget.

(and of course combine them with .value or .val())

0

精彩评论

暂无评论...
验证码 换一张
取 消