快速输入时的输入值问题

时间:2010-06-29 23:52:03

标签: javascript jquery events input

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

问题是当一个人慢慢打字“a”& “b”上面的代码将导致控制台日志中的“a”,“b”。但是当有人快速完成时,结果是“ab”,“ab”。使用键盘附近的字母更容易。 “e” 的&安培; “R”。 如何避免?

事件keydown和keypress不会遇到“quicktypers”问题,但在这种情况下它们也是早期的,因为输入的值在它们出现时不包含最后输入的字母。或者也许有办法让这封信得到一些怎么样?

2 个答案:

答案 0 :(得分:5)

嗯,这个问题不是真正的快速输入,而是实际发生了关键事件。考虑一下:

  • a被按下
  • b被按下
  • a已发布
  • b已发布

无论执行速度有多慢,在释放第一个密钥之前,您都不会获得密钥启动事件。显然没有办法解决这个问题,在释放密钥之前不能导致密钥启动事件。

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

$('#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
        }