Jquery 按键,ctrl+;c(或类似的组合)

Jquery 按键,ctrl+;c(或类似的组合),jquery,keypress,keydown,jquery-events,Jquery,Keypress,Keydown,Jquery Events,我试图在我正在制作的网站上创建快捷方式。我知道我可以这样做: 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

我试图在我正在制作的网站上创建快捷方式。我知道我可以这样做:

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!!");
});
这可能吗?我已经试过了,但没用,我做错了什么?

试试这个插件,它可以满足你的所有要求

jQuery热键是一个插件,它允许 您可以轻松地添加和删除的处理程序 代码中任意位置的键盘事件 支持几乎任何键组合

此插件基于此插件 作者Tzury Bar Yochay:jQuery.hotkeys

语法如下:


Jquery有一个名为“热键”的插件,它允许您绑定到按键组合

这是你想要的吗

另一种方法(不需要插件)是只使用传入的属性。它指示在事件发生时是否按下了Ctrl键,如下所示:

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

var ctrlMode=false;//如果为true,则ctrl键为向下
///这很有效
$(文档).keydown(函数(e){
如果(e.ctrlKey){
ctrlMode=true;
};
});
$(文档).keyup(函数(e){
ctrlMode=false;
});
jQuery不能使用Ctrl+C,但可以使用另一个

现场演示:

我参加聚会有点晚,但这是我的职责

$(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" );
    }
});

在我的例子中,我正在寻找一个按下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”是某些特定字段的类名,我有一个链接,我想使用我的键和单击组合来访问它。

我无法让它与.keypress()一起使用,但它与.keydown()函数一起使用,如下所示:

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

$(窗口)。按键(“c”,功能(e){
如果(!e.ctrlKey)
返回;
$(“div”).show();
});
/*https://gist.github.com/jeromyanglim/3952143 */
kbd{
空白:nowrap;
颜色:#000;
背景:#eee;
边框样式:实心;
边框颜色:#ccc#aaa#888#bbb;
填充:2px6px;
-moz边界半径:4px;
-webkit边界半径:4px;
边界半径:4px;
-moz盒阴影:0 2px 0 rgba(0,0,0,0.2),0 0 1px#ffffff插入;
-webkit盒阴影:0 2px 0 rgba(0,0,0,0.2),0 0 1px#ffffff插入;
长方体阴影:0 2px 0 rgba(0,0,0,0.2),0 0 1px#ffffff插入;
背景色:#FAFAFA;
边框颜色:#中交#中交#FFFFFF;
边框样式:实心-实心-无;
边框宽度:1px 1px中等;
颜色:#4444;
字体系列:“Helvetica Neue”,Helvetica,Arial,无衬线;
字体大小:11px;
字体大小:粗体;
空白:nowrap;
显示:内联块;
边缘底部:5px;
}

检测到CTRL+C!
从2019年起,这项功能开始工作(至少使用Chrome)


在jQuery中执行此操作的简单方法:

/* The elements we'll bind the shortcut keys to. */
var elements = "body, input, select, checkbox, textarea";

/* Bind the key short-cut 'Ctrl+S' to the save function. */
$(elements).bind ("keydown", "ctrl+space", function (e) {
    // Prevent the default operation.
    e.preventDefault ();
    // Stop processing if we're already doing something.
    console.log ("That's right , you pressed correct shortcut!");
});

+1不过,绑定Ctrl+C或任何其他预定义的热键组合并不是一种好的做法。小心处理。同意,这只是一个例子,我实际上在试图找出鼠标光标弹出的菜单的最佳组合键。但是我需要的插件太多了,我已经在上面的问题中发布了一些工作代码,第一个例子。它工作得很好,我只是想知道我是否可以用我给出的第二个例子做一个键组合。不过谢谢。插件对于我所需要的东西的简单性来说有点过分了,特别是在4.4kb的情况下,它太多了,谢谢你。但是没有比:
.keypress(“c+s”)更简单的了,
当我按下c和s时,它会做些什么?在你的代码中,我必须同时按下它们,我需要按住一个键并按下另一个键,我实际上只是在创建一个菜单,当我按下某个组合键时,它会弹出,所以可能按住s并左键单击或诸如此类的东西,不确定是哪个键我还要用combo。@android.nick-不是jQuery核心内置的,不,你需要一个插件,但是对于ctrl、alt和shift键,你可以只使用
.ctrlKey
.altKey
.shiftKey
属性。@ravz-哪个部分,哪个版本的jQuery?这些东西的级别很低,所以应该可以在K.@ Nek.E.CTRLKEY与IE 8不起作用。无论如何,您的答案帮助了我。我使用Evest.KEY代码来检测Ctrl + Ct函数,当控件+任何键被按下时,该函数将触发。<代码> KePress < /代码>忽略第一个参数。您需要比较<代码> E.<代码> >以确定哪个键实际上被按下。您是否考虑添加一些NARR?我想解释一下这段代码的工作原理,以及是什么让它成为问题的答案?从我刚才的测试来看,IE8似乎没有通过某些特殊键的按键(Ctrl-C-否,Ctrl-X和V-是).而keydown是通过的,所以这个答案是有效的。这对我使用jQuery 1.11.2是有效的。接受的答案不是。同意这个方法在jQueryMac的更高版本中更有效⌘ e.metaKey对我有用吗
$(window).keypress("c", function(e) {
  if (!e.ctrlKey)
    return;

  console.info("CTRL +  C detected !");
});
$(document).keypress(function(e) {
    var key = (event.which || event.keyCode) ;
  if(e.ctrlKey) {
        if (key == 26) { console.log('Ctrl+Z was pressed') ; }
        else if (key == 25) { console.log('Ctrl+Y was pressed') ; }
        else if (key == 19) { console.log('Ctrl+S was pressed') ; }
    else { console.log('Ctrl', key, 'was pressed') ; }
    }
});
/* The elements we'll bind the shortcut keys to. */
var elements = "body, input, select, checkbox, textarea";

/* Bind the key short-cut 'Ctrl+S' to the save function. */
$(elements).bind ("keydown", "ctrl+space", function (e) {
    // Prevent the default operation.
    e.preventDefault ();
    // Stop processing if we're already doing something.
    console.log ("That's right , you pressed correct shortcut!");
});