Проблема с входным значением при быстром наборе текста - PullRequest
2 голосов
/ 30 июня 2010
$("#input").keyup(function(){
 console.log($(this).val());
})

Проблема в том, что когда вы медленно набираете "a" & "b", приведенный выше код приведет к появлению "a", "b" в журнале консоли. Но когда кто-то делает это быстро, результатом является «ab», «ab». Это легче сделать с буквами, которые находятся рядом на клавиатуре, например. «Е» и «Г». Как этого избежать?

События keydown и keypress не страдают от проблемы «быстрых подсказок», но они также имеют место в этом случае рано, потому что значение ввода не содержит последней набранной буквы, когда они происходят. Или, может быть, есть способ как-нибудь получить это письмо?

Ответы [ 2 ]

5 голосов
/ 30 июня 2010

Ну, проблема не в быстром наборе текста, а на самом деле, когда происходит событие key up.Учтите это:

  • нажата a
  • b нажата
  • a отпущена
  • b отпущена

Независимо от того, насколько медленно это будет сделано, вы не получите событие key up, пока не отпустите первый ключ.Очевидно, что нет никакого способа обойти это, вы не можете вызвать событие нажатия клавиши до того, как она будет отпущена.

Если вы просто хотите, чтобы клавиша была нажата в событии нажатия клавиши, вы можете получить ее изобъект события.Пример:

$('#input').keypress(function(e){
  console.log(e.which);
});
0 голосов
/ 17 ноября 2017

У меня была похожая проблема, и я нашел обходной путь. По сути, я создавал массив с 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
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...