Javascript 为什么我在快速输入时会出错,键盘输入值翻倍?
当您缓慢键入“a”和“b”时,上述代码将导致控制台日志中出现“a”、“b”。但问题是当有人很快做到这一点时。结果是“ab”,“ab”。使用键盘上靠近的字母,例如“e”和“r”,更容易重复这种情况如何避免它?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被释放 无论执行速
事件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
}