Javascript 如何在jQuery中识别长按箭头键
我自己有两个选择Javascript 如何在jQuery中识别长按箭头键,javascript,jquery,keypress,keydown,Javascript,Jquery,Keypress,Keydown,我自己有两个选择keypress和keydown。我倾向于使用按键,因为它记录了一个事件,即使按键重复,也就是长时间按下。但问题是,keypress只在Firefox中记录特殊键,如箭头键。如果我想跨浏览器执行此操作,则必须使用keydown,但长按将被记录为单个事件 非常感谢您的帮助。有一个名为的插件可能有助于实现此目标。有一个名为的插件可能有助于实现此目标 var pressed = null; $(element).on('keydown', function(event) { p
keypress
和keydown
。我倾向于使用按键
,因为它记录了一个事件,即使按键重复,也就是长时间按下。但问题是,keypress
只在Firefox中记录特殊键,如箭头键。如果我想跨浏览器执行此操作,则必须使用keydown
,但长按将被记录为单个事件
非常感谢您的帮助。有一个名为的插件可能有助于实现此目标。有一个名为的插件可能有助于实现此目标
var pressed = null;
$(element).on('keydown', function(event) {
pressed = +new Date();
// do whatever else you need upon key down
});
$(element).on('keyup', function(event) {
var duration = +new Date() - pressed;
pressed = null;
// do whatever you need to do based on the duration of the press
});
我把它作为一个练习留给你们去解决对多个同时按下的键的支持
我把它作为一个练习留给您来解决对多个同时按下的按键的支持。您可以使用两个事件,如下所示:
var timer=false,
pressedTime = 1000; //one second
$('input').on({
keydown: function(e) {
var charCode = (e.which) ? e.which : event.keyCode, keyP;
if (charCode===37) keyP = 'left';
if (charCode===38) keyP = 'up';
if (charCode===39) keyP = 'right';
if (charCode===40) keyP = 'down';
if (!timer) timer = setTimeout(function() {
clearTimeout(timer);
timer=false;
alert(keyP+' arrow key held down for 1 second');
}, pressedTime);
},
keyup: function() {
clearTimeout(timer);
timer=false;
}
});
您可以使用两个事件,如下所示:
var timer=false,
pressedTime = 1000; //one second
$('input').on({
keydown: function(e) {
var charCode = (e.which) ? e.which : event.keyCode, keyP;
if (charCode===37) keyP = 'left';
if (charCode===38) keyP = 'up';
if (charCode===39) keyP = 'right';
if (charCode===40) keyP = 'down';
if (!timer) timer = setTimeout(function() {
clearTimeout(timer);
timer=false;
alert(keyP+' arrow key held down for 1 second');
}, pressedTime);
},
keyup: function() {
clearTimeout(timer);
timer=false;
}
});
您的代码无法工作。您必须存储keyCode,以确保keyup与keydown相关联。@DieVarDump您显然错过了代码段下的行。
new Date()
返回一个日期实例Date.now()
返回从纪元开始的毫秒数。因为我们要计算一个持续时间,所以查看完整的日期实例是没有意义的。同意@Derek的观点,如果date.now()
在所有浏览器中都不起作用,并且键入的日期几乎不比+new date
少,那么使用date.now()有什么意义呢+new Date
不会返回新的日期实例,事实上,填充Date.now()
的方法是+new Date()
,正如这里所建议的@lanzz No,根据MDN,它是2009年发布的ecmascript edition 5的一部分。您的代码将无法工作。您必须存储keyCode,以确保keyup与keydown相关联。@DieVarDump您显然错过了代码段下的行。new Date()
返回一个日期实例Date.now()
返回从纪元开始的毫秒数。因为我们要计算一个持续时间,所以查看完整的日期实例是没有意义的。同意@Derek的观点,如果date.now()
在所有浏览器中都不起作用,并且键入的日期几乎不比+new date
少,那么使用date.now()有什么意义呢+new Date
不会返回新的日期实例,事实上,填充Date.now()
的方法是+new Date()
,正如这里所建议的@lanzz No,根据MDN的说法,它是2009年发布的ecmascript edition 5的一部分,没有任何帮助。我试图做的是将用户的所有键盘操作复制到另一个文本框中。响应性将更有助于减少我为复制操作而拨打的电话数量。我可能会考虑这件事以后,一旦我有一个基本的版本运行,不会有帮助。我试图做的是将用户的所有键盘操作复制到另一个文本框中。响应性将更有助于减少我为复制操作而拨打的电话数量。当我有一个基本版本运行后,我可能会考虑这件事。我在某个地方读到的keydown比,keyup更适合这件事,但我认为在我的情况下,任何人都会像你在这里读到的一样工作:。我在某个地方读到的keydown比,但我认为在我的情况下,任何人都会这样做:。@Ghokun-谢谢,似乎是最简单的方法,在JS中应该避免长时间争论对象。@Ghokun-谢谢,似乎是最简单的方法,在JS中应该避免长时间争论对象。