Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我在快速输入时会出错,键盘输入值翻倍?_Javascript_Jquery_Event Handling_Dom Events_Return Value - Fatal编程技术网

Javascript 为什么我在快速输入时会出错,键盘输入值翻倍?

Javascript 为什么我在快速输入时会出错,键盘输入值翻倍?,javascript,jquery,event-handling,dom-events,return-value,Javascript,Jquery,Event Handling,Dom Events,Return Value,当您缓慢键入“a”和“b”时,上述代码将导致控制台日志中出现“a”、“b”。但问题是当有人很快做到这一点时。结果是“ab”,“ab”。使用键盘上靠近的字母,例如“e”和“r”,更容易重复这种情况如何避免它? 事件keydown和keypress并没有遇到快速打字的问题,但它们也很早就被解雇了。结果:输入的返回值不包含出现时最后键入的字母。或者有什么方法可以得到最后一个字母?好吧,问题不在于打字速度太快,而在于按键事件发生时。考虑这一点: a被按下 b被按下 一名男子获释 b被释放 无论执行速

当您缓慢键入“a”和“b”时,上述代码将导致控制台日志中出现“a”、“b”。但问题是当有人很快做到这一点时。结果是“ab”,“ab”。使用键盘上靠近的字母,例如“e”和“r”,更容易重复这种情况如何避免它?


事件keydown和keypress并没有遇到快速打字的问题,但它们也很早就被解雇了。结果:输入的返回值不包含出现时最后键入的字母。或者有什么方法可以得到最后一个字母?

好吧,问题不在于打字速度太快,而在于按键事件发生时。考虑这一点:

  • a被按下
  • b被按下
  • 一名男子获释
  • b被释放
无论执行速度有多慢,在释放第一把钥匙之前,您都不会获得钥匙向上事件。显然没有办法解决这个问题,您不能在释放密钥之前引发密钥启动事件

如果只需要在按键事件中按下的键,可以从事件对象中获取该键。例如:

$("#input").keyup(function(){
 console.log($(this).val());
})

我有一个类似的问题,并找到了解决办法。基本上,每次启动keyup时,我都创建了一个带有事件时间戳(例如timeStamp)的数组。然后,我比较了数组中的最后两个值(最近的两个),如果时间差不超过100ms,则停止事件

这是我在keyup侦听器调用的函数中的代码:

$('#input').keypress(function(e){
  console.log(e.which);
});
timeArray.push(e.timeStamp); // add new timeStamp to array      
if (timeArray.length >= 2) { 
        var diff = (timeArray[timeArray.length - 1] - timeArray[timeArray.length - 2]);
        if (diff > 100) {   // 1 second
                // perform desired action
        } else { return false; }
} else {
            // still perform desired action if array only has one timestamp
        }