2011-01-05 57 views
42

我想在我制作的网站上创建快捷方式。我知道我能做到这样:jquery:按键,ctrl + c(或一些像这样的组合)

if(e.which == 17) isCtrl=true; 
if(e.which == 83 && isCtrl == true) { 
    alert('CTRL+S COMBO WAS PRESSED!') 
    //run code for CTRL+S -- ie, save! 
    e.preventDefault(); 
} 

但下面的例子更容易,更少的代码,但它不是一个组合按键事件:如果使用第二

$(document).keypress("c",function() { 
    alert("Just C was pressed.."); 
}); 

所以我想知道例如,我可以这样做:

$(document).keypress("ctrl+c",function() { 
    alert("Ctrl+C was pressed!!"); 
}); 

这是可能的吗?我试过了,它不起作用,我做错了什么。

回答

69

另一种方法(无插件需要),它只是使用被传递的event object.ctrlKey财产这表明如果Ctrl键在事件发生时被按下,这样的:

$(document).keypress("c",function(e) { 
    if(e.ctrlKey) 
    alert("Ctrl+C was pressed!!"); 
}); 
+0

但是没有什么像:'.keypress(“c + s”,'当我按住c AND s它会做什么?在你的代码中我必须同时按下它们,我需要按住1键并按另一个键,我真的只是创建一个菜单,当我按下某个键组合时弹出,所以也许按住s并左键单击或者其他类似的东西,不知道什么关键组合我' – 2011-01-05 13:25:18

+4

@ android.nick - 没有内置jQuery核心,不需要,你需要一个插件* *,但是对于ctrl,alt和shift键,你可以使用'.ctrlKey', '.altKey'和'.shiftKey'属性。 – 2011-01-05 13:26:16

+0

@nick此代码在IE8中不起作用 – ravi404 2012-08-14 17:05:27

5

尝试使用Jquery Hotkeys插件 - 它会完成您所需的一切。

jQuery的热键是一个插件,可以让 您轻松 键盘在你的代码 随时随地事件支持几乎所有的组合键添加和删除处理。

这个插件是由Tzury酒吧Yochay基于关闭插件 的:jQuery.hotkeys

的语法如下:

$(expression).bind(types, keys, handler); $(expression).unbind(types, handler); 

$(document).bind('keydown', 'ctrl+a', fn); 

// e.g. replace '$' sign with 'EUR' 
// $('input.foo').bind('keyup', '$', function(){ 
//  this.value = this.value.replace('$', 'EUR'); }); 
+2

+1这不是绑定按Ctrl + C虽好做法,或任何其他预定义的热键组合。小心轻放。 – 2011-01-05 12:43:51

+0

@Pekka好点 – Andy 2011-01-05 12:56:51

+0

同意了,这仅仅是一个例子,我实际上试图找出一个菜单的最佳组合键,这个菜单可以通过鼠标光标弹出。 – 2011-01-05 13:19:04

1

还有的jQuery插件称为 “热键”它允许您绑定到按键组合。

这是做你以后的事情吗?

Jquery HotKeys - Google Code

+0

一个插件对于我所需要的简单性来说是一种矫枉过正,特别是在4.4kb的时候,这太过分了,谢谢。 – 2011-01-05 13:17:48

1
<script src="http://code.jquery.com/jquery-latest.js"></script> 
<script type='text/javascript'> 
    var ctrlMode = false; // if true the ctrl key is down 
    ///this works 
    $(document).keydown(function(e){ 
    if(e.ctrlKey){ 
     ctrlMode = true; 
    }; 
    }); 
    $(document).keyup(function(e){ 
    ctrlMode = false; 
    }); 
</script> 
+1

你会考虑添加一些叙述来解释为什么这段代码有效吗?是什么使它成为这个问题的答案? – 2012-05-20 11:46:15

+0

从我刚才的测试中看来,IE8似乎没有通过* some *特殊键的按键(Ctrl-C - no,Ctrl X和V - yes)。鉴于keydown * *通过,所以这个答案的作品。 – 2012-08-09 17:37:10

3

你不能用j使用按Ctrl +ç查询,但你可以用另一个库,它是shortcut.js

现场演示: Abdennour JSFiddle

$(document).ready(function() { 
shortcut.add("Ctrl+C", function() { 
    $('span').html("أحسنت. لقد ضغطت على حرفي : Ctrl+C"); 
     }); 
    shortcut.add("Ctrl+V", function() { 
    $('span').html("أحسنت. لقد ضغطت على حرفي : Ctrl+V"); 
     }); 
     shortcut.add("Ctrl+X", function() { 
    $('span').html("أحسنت. لقد ضغطت على حرفي : Ctrl+X"); 
     }); 


}); 
29

我是迟到了,但这里是我的一部分

$(document).on('keydown', function (e) { 
    // You may replace `c` with whatever key you want 
    if ((e.metaKey || e.ctrlKey) && (String.fromCharCode(e.which).toLowerCase() === 'c')) { 
     console.log("You pressed CTRL + C"); 
    } 
}); 
+6

这对我来说使用jQuery 1.11.2。接受的答案没有。 – sarme 2015-06-09 16:56:10

+2

一致认为这种方法更好地与更高版本的jQuery – asherrard 2015-08-31 14:35:11

+2

Mac的⌘是e.metaKey所以'(e.metaKey || e.ctrlKey)&& ...'为我工作 – kevnk 2015-10-14 14:06:01

0

在我的情况,我正在寻找一个keydown ctrl键并单击事件。 我的jQuery看起来是这样的:

$('.linkAccess').click(function (event) { 
    if(true === event.ctrlKey) { 

    /* Extract the value */ 
    var $link = $('.linkAccess'); 
    var value = $link.val(); 

    /* Verified if the link is not null */ 
    if('' !== value){ 
     window.open(value); 
    } 
    } 
}); 

其中“linkAccess”是,我有一个链接的一些具体领域类的名字,我想用我的组合键来访问它,然后单击。

0

我无法得到它与.keypress()工作,但像这样的.keydown()函数的工作:

$(document).keydown(function(e) { 
    if(e.key == "c" && e.ctrlKey) { 
     console.log('ctrl+c was pressed'); 
    } 
});