不需要的事件处理函数正在 jQuery 中执行

Unwanted event handler function is executing in jQuery

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

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

我根本没有按 Ctrl+C,但我的控制台打印消息的次数与我按任意键的次数一样多。这里有什么缺陷?在此先感谢您的帮助。

您正在将事件绑定到任何 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');
  }
});

According to the API,您将 'ctrl+c' 作为事件数据传递给事件处理程序,这意味着回调将在每个 keydown 事件上执行,而您没有使用您传入的 'ctrl+c' 数据用于进行任何密钥检查。

相反,如果您想要检测何时按下某个键并结合 ctrl,您需要检查事件的 whichctrlKey 属性对象:

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

Andrew 的回答是正确的,但是 JQuery 提供直接绑定到 copy/paste/cut 操作,这样更简洁。

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