在jQuery

时间:2016-01-18 20:32:49

标签: javascript jquery keyboard-events eventhandler

我是jQuery的新手,我遇到了一个事件处理程序冗余执行的问题。这是我的代码:

$(document).bind('keydown', 'ctrl+c', function(){
    console.log("Something is wrong!!!");
});

我没有按,按Ctrl + C,但我的控制台正在打印消息,因为我按任意键。这有什么缺陷?如果您有任何帮助,请提前致谢。

3 个答案:

答案 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一起按下某个键,则需要检查事件对象的whichctrlKey属性:

...keydown(function (e) {
    if (e.which === yourkeycode && e.ctrlKey) {
        ...do stuff...
    }
});

答案 2 :(得分:1)

安德鲁的答案是正确的,但是JQuery提供了直接复制/粘贴/剪切操作的绑定,这更加清晰。

$(document).bind('copy', function() {
  alert('ctrl+C pressed');
});