我有两个事件处理程序,一个用于keydown,另一个用于keyup。 keydown事件处理程序触发警报消息,但这会阻止keyup事件触发。
您可以在此处看到一个非常简单的示例:http://jsfiddle.net/boblauer/jaGwT/当keydown打开警报时,不会触发密钥,但是当未打开警报时,会触发密钥。这是来自jsfiddle的代码:
var i = 0;
window.addEventListener('keydown', function(e) {
if (i++ % 2) alert('down');
console.log('down');
});
window.addEventListener('keyup', function(e) {
alert('up');
console.log('up');
});
我有一个支持监听多个键组合的库(例如'd + f'),因此当按下某个键时,我需要将它添加到当前按下的键列表中,当一个键时发布后,我需要将其从列表中删除。我正在遇到的问题是,如果我想要同时按下d + f时显示警报,我从“当前按下”列表中删除这些键的代码永远不会触发,因为我的密钥处理程序永远不会被调用
我无法想到解决这个问题的好方法。有什么想法吗?
答案 0 :(得分:4)
警报可防止事件发生。你可以做的是手动触发这个功能,因为它无论如何都会发生。
var keyupfunction = function(e){
alert('up');
console.log('up');
}
window.addEventListener('keyup', keyupfunction);
window.addEventListener('keydown', function(e) {
if (i++ % 2) alert('down');
console.log('down');
keyupfunction(e);
});
但实际上,你不应该使用警报。它会阻止这些事件,但谁知道它可能会破坏什么。请改用自定义的东西。