Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 捕捉不同的按键_Javascript_Jquery_Keypress - Fatal编程技术网

Javascript 捕捉不同的按键

Javascript 捕捉不同的按键,javascript,jquery,keypress,Javascript,Jquery,Keypress,当您按下一个键时,JQuery事件开始疯狂地弹出,只需按下一个键: ... keydown keypress keyup keydown keypress keyup ... 是否有任何(甚至非浏览器便携式)方法可以为每个按下的键只捕获一个事件(例如:按住A键,这将只产生一个函数调用) 干杯 我发现keyup的效果最好 $(document).keyup(function(e) { alert(e.keyCode); }); 我发现keyup的效果最好 $(document).keyup

当您按下一个键时,JQuery事件开始疯狂地弹出,只需按下一个键:

...
keydown
keypress
keyup
keydown
keypress
keyup
...
是否有任何(甚至非浏览器便携式)方法可以为每个按下的键只捕获一个事件(例如:按住A键,这将只产生一个函数调用)


干杯

我发现keyup的效果最好

$(document).keyup(function(e) {
  alert(e.keyCode);
});

我发现keyup的效果最好

$(document).keyup(function(e) {
  alert(e.keyCode);
});

既然您给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; } );
queue=newarray();
setTimeInterval(100,函数(){queue.process();});
queue.process=函数(){
key=队列[0];
过程(关键);
//通过移动数组使用等价的按键
var originallength=queue.length;
//查找班次大小
var firstdiff=1;
对于(;firstdiff

或者使用按键事件之间的最小时间差来防止将所有消息附加到队列中,如中所示。

既然您给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; } );
queue=newarray();
setTimeInterval(100,函数(){queue.process();});
queue.process=函数(){
key=队列[0];
过程(关键);
//通过移动数组使用等价的按键
var originallength=queue.length;
//查找班次大小
var firstdiff=1;
对于(;firstdiff

或者防止使用按键事件之间的最小时间差将所有事件附加到队列中,如。

Yes:
bind
仅绑定其中一个事件。Yes:
bind
仅绑定其中一个事件。但这会在每次按键时产生多个事件。@Mike:绑定到一个事件不会产生更多事件。您是说$(document)。bind('keydown',callback)?它会。不,它不会。每次你把一个手指从一个键上移开时,这个事件都会触发。karim79,你在做什么?jQuery会处理keyCode浏览器的问题。请小心编辑。但这会在每次按下一个键时产生多个事件。@Mike:绑定到一个事件不会产生更多的事件。你是说$(文档).bind('keydown',callback)?它会。不,它不会。每次你将手指从键上移开时,都会触发此事件。karim79,你在做什么?jQuery会处理keyCode浏览器问题。请小心编辑。