【问题标题】:JavaScript: How to get value of sender input element from keyup event?JavaScript:如何从 keyup 事件中获取发送者输入元素的值?
【发布时间】:2010-02-28 16:18:04
【问题描述】:

我需要捕获 keyup 事件以在用户输入输入时提供实时验证(更改事件仅在输入失去焦点时触发)。

我无法获取触发 evnt 的输入的编辑值。

该代码还会在计时器上运行,以防止在用户键入时多次调用(仅每 500 毫秒触发一次)。

我有几个带有“priceinput”类的输入,并附加到每个的 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>

为了获取发件人输入值,我尝试了$(this).valthis.val()e.target.val(),但似乎都没有。

如何获取发送者输入的值?

【问题讨论】:

    标签: javascript jquery events input


    【解决方案1】:

    问题在于,在您的超时函数中,您丢失了对输入元素的“this”引用。试试这样的:

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

    【讨论】:

    • +1 这是处理超时和回调时非常常见的模式。另请注意,正如尖锐所示, .each() 不是必需的,jquery 在内部处理它。
    • 对于那些想知道 $input 中的 $ 符号的人来说,这是一个注释:它是变量名称的一部分,在这种情况下,它用于指出变量是一个 jQuery 对象。详情请见here
    【解决方案2】:

    在 Internet Explorer 中应该是 event.srcElement,在 Firefox 中应该是 event.target
    或者试试event.toElementevent.relatedTarget

    (当然也可以将它们与.value.val() 结合起来)

    【讨论】:

      猜你喜欢
      • 2011-05-09
      • 1970-01-01
      • 2023-01-05
      • 1970-01-01
      • 1970-01-01
      • 2014-03-02
      • 1970-01-01
      • 2014-01-19
      • 2020-02-06
      相关资源
      最近更新 更多