2017-08-09 62 views
-1

我想检查,使用jQuery,当一个键被按下,然后释放。只有在发布之后,我才希望该函数能够运行(如果唯一的方法不涉及jQuery,但是如果有两种方法,我宁愿它是具有较少字节的方法)。
我敢肯定,该解决方案将使用keyup()keydown()keypress()函数的混合,但我还没有弄清楚如何链接它们,以便代码可以接收所需的输出。我当前的代码是:检测当一个键被按下,然后使用jQuery释放

$("body").keydown(function(event) { 
    $("body").keyup(function(event) { 
     console.log("key pressed/released"); 
     var keyPressed = keys[event.keyCode]; 
     player.hit(keyPressed); 
    }); 
}); 

但导致数十key pressed/released消息被记录在控制台后我释放的关键。当我点击一个键时,或者当我释放它时,将keydown()keyup()分别带走key pressed/released结果。 keypress()也不能代替keydown(),keyup(),或者仅仅依靠它自己。我应该做什么来实现我想要的结果?

+0

我必须强烈建议您使用[Mousetrap](https://craig.is/killing/mice) –

+0

*“字节较少的字符”* - 您的意思不是jQuery.js文件本身?比方说,调用jQuery方法的三行代码加上整个jQuery.js库比十行非jQuery代码“少”? – nnnnnn

+0

@nnnnnn是的,我的意思是在我的文件本身。这并不重要,虽然 –

回答

-1

那么你可以创建一个变量,比如x。 x是错误的。分开keyup和keydown函数。在keydown下添加一个if(!x)并使x为真。在keyup下添加一个if(x)并使x为false。 我不编码jquery,但我认为这可能会有所帮助。

1

我想检查,使用jQuery,当一个键被按下,然后释放。
只有推出后,我希望函数运行

好吧,如果keyup被解雇,你可以肯定的关键是双方按下和释放,否则该事件将不火,所以这是真的一切你需要的。

$(document).on('keyup', function() { 
    console.log('key was released') 
}) 

或不jQuery的

document.addEventListener('keyup', function() { 
    console.log('key was released') 
}); 

你的代码最终记录几十,然后数百封邮件,是因为您绑定的事件处理程序内的事件,这是一个禁忌。

0

诀窍是将两个函数分开,然后使用两个函数都可以访问的变量。

先说明没有按键被按下。在你的keydown()里面,运行一个条件来检查当前是否有一个键被按下。通过在条件内设置key_pressed变量为true,您只会触发条件一次;当按键为时首先按下

然后当密钥被释放时,将变量设置回false以表明当前没有按键被按下。这将允许你在释放第一个键后按二级密钥,并再次触发条件:

var key_pressed = false; 
 

 
$("body").keydown(function(event) { 
 
    if (!key_pressed) { 
 
    console.log("key pressed"); 
 
    key_pressed = true; 
 
    }; 
 
}); 
 

 
$("body").keyup(function(event) { 
 
    key_pressed = false; 
 
    console.log('key released'); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

做这种方式的好处是,你可以触发逻辑特别是当钥匙被扣下时。

希望这会有所帮助!:)

+0

我很肯定你是通过@Confused Soul获得ninja'd的,但是感谢你添加了代码和代码片段。 –

+0

男人,我希望我可以接受2个答案... –

+0

哈哈是的,他肯定是非常快的职位!他确实是第一个(有适当的答案),所以我不能抱怨你接受他的回答:)但是,请注意,虽然你不能接受两个答案,你可以**改变选择一个选定的答案(或者甚至完全不接受答案),如果你觉得一个更好。另外,一旦你的声望达到15,你就可以[**]投票(https://stackoverflow.com/help/privileges/vote-up)任何答案来表明它是有用的 - 它不需要被接受:) –