我是jQuery的新手,我遇到了一个事件处理程序冗余执行的问题。这是我的代码:
$(document).bind('keydown', 'ctrl+c', function(){
console.log("Something is wrong!!!");
});
我没有按,按Ctrl + C,但我的控制台正在打印消息,因为我按任意键。这有什么缺陷?如果您有任何帮助,请提前致谢。
答案 0 :(得分:3)
您将事件绑定到任何keydown
。您想使用keydown
事件,但请检查以确保您指定的键是被按下的键。 e.ctrlKey
将检查 Ctrl ,您可以使用e.which
来比较另一个密钥,在本例中为 C
这是一个完整的例子
$(document).bind('keydown', function(e) {
console.log('some key pressed');
if (String.fromCharCode(e.which).toLowerCase() == "c" && e.ctrlKey) {
alert('ctrl+C pressed');
}
});
答案 1 :(得分:2)
According to the API,您将'ctrl+c'
作为事件数据传递给事件处理程序,这意味着回调将在每个keydown
事件上执行,而您没有使用您传入的'ctrl+c'
数据,用于执行任何密钥检查。
相反,如果您想要检测何时与ctrl
一起按下某个键,则需要检查事件对象的which
和ctrlKey
属性:
...keydown(function (e) {
if (e.which === yourkeycode && e.ctrlKey) {
...do stuff...
}
});
答案 2 :(得分:1)
安德鲁的答案是正确的,但是JQuery提供了直接复制/粘贴/剪切操作的绑定,这更加清晰。
$(document).bind('copy', function() {
alert('ctrl+C pressed');
});