Поскольку вы предоставляете jQuery обратный вызов, вы сдаетесь его остроумию. Однако вы могли бы увеличить задержку для чрезмерных уведомлений, установив какую-то очередь отложенных событий, которую вы обрабатываете каждую десятую секунды.
queue = new Array();
setTimeInterval( 100, function() { queue.process(); } );
queue.process = function( ) {
key = queue[0];
process( key );
// consume equivalent keypresses by shifting array
var originallength = queue.length;
// find shift size
var firstdiff = 1;
for(; firstdiff < queue.length && queue[ firstdiff ] == key;
firstdiff=firstdiff+1 )
{}
var newlength = originallength - firstdiff;
// shift everything and delete trailing tail
var i = firstdiff;
for( var j = 0; j != newlength; j=j+1 ) { queue[ j ] = queue[ j+firstdiff ]; }
for( var k = newlength; k != originallength; k=k+1 ) { queue[k]=null; }
}
$(document).keyup( function(e) { queue[ queue.length ] = e; } );
Или вообще запретить добавление в очередь с использованием минимального различия во времени между событиями нажатия клавиш, как в этот ответ .