我一直想知道是否有一种简单的方法可以检测用户是否在一秒内两次按下键盘上的相同字符。我写了一些有用的代码,但它不可靠。
var escapeCount = 0;
function reset() {
escapeCount = 0;
setTimeout('reset();', 1000);
}
window.onload = function() {
reset();
};
document.onkeyup = function(e) {
if (!e) var e = window.event;
var code = e.keyCode ? e.keyCode : e.which;
if (code == 27) escapeCount +=1;
if (escapeCount == 2) {
// stuff on second escape
}
};
有更好的方法吗?谢谢
答案 0 :(得分:5)
自从按下最后一个字符后经过1秒后重置是有意义的。例如:
var lastChar = -1;
document.onkeyup = function(e) {
if (!e) var e = window.event;
var code = e.keyCode ? e.keyCode : e.which;
if (lastChar == code) {
// Same key was pressed twice in a row within 1 second.
} else {
lastChar = code;
setTimeout(function() {lastChar = -1;}, 1000);
}
};
答案 1 :(得分:0)
您的计时器每秒重置一次,因此您不仅必须在最后一次Escape的秒内再次按Escape,而且还必须在两次按下之间没有超时。
忘记超时可能更容易,只记得最后一次按键的时间:
var lastescapetime= null;
document.onkeyup= function(event) {
if (event===undefined) event= window.event;
if (event.keyCode===27) {
var now= new Date().getTime();
if (lastescapetime!==null && now<lastescapetime+1000) {
alert('You double-escaped!');
lastescapetime= null;
} else {
lastescapetime= now;
}
} else {
lastescapetime= null;
}
};