$("#input").keyup(function(){
console.log($(this).val());
})
问题是当一个人慢慢打字“a”& “b”上面的代码将导致控制台日志中的“a”,“b”。但是当有人快速完成时,结果是“ab”,“ab”。使用键盘附近的字母更容易。 “e” 的&安培; “R”。 如何避免?
事件keydown和keypress不会遇到“quicktypers”问题,但在这种情况下它们也是早期的,因为输入的值在它们出现时不包含最后输入的字母。或者也许有办法让这封信得到一些怎么样?
答案 0 :(得分:5)
嗯,这个问题不是真正的快速输入,而是实际发生了关键事件。考虑一下:
无论执行速度有多慢,在释放第一个密钥之前,您都不会获得密钥启动事件。显然没有办法解决这个问题,在释放密钥之前不能导致密钥启动事件。
如果您只想要在按键事件中按下的键,则可以从事件对象中获取该键。例如:
$('#input').keypress(function(e){
console.log(e.which);
});
答案 1 :(得分:0)
我遇到了类似的问题并找到了解决方法。基本上,我每次启动keyup时都会创建一个包含事件timeStamp(e.timeStamp)的数组。然后我比较了数组中的最后两个值(最近的两个),并且如果时间上的差异不是至少100毫秒,则停止事件。
这是我在keyup监听器调用的函数内的代码:
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
}