JavaScript:检查CTRL按钮是否被按下

80

我需要使用JavaScript检测当我点击HTML页面上的一个控件时是否按下了CTRL键。

我该如何实现?

3个回答

151
尝试查看事件对象。例如:

document.body.onclick = function (e) {
   if (e.ctrlKey) {
      alert("ctr key was pressed during the click");
   }
}
<p>Click me, and sometimes hold CTRL down!</p>


3
在 Mac 上使用「Ctrl + 点击」等同于右键点击,但是仍会出现浏览器菜单的行为。 - Andrew K
7
如果您需要检测Mac OS X的命令键,请检查事件对象e.metaKeymetaKey属性。 - romek
你如何在事件外获取Ctrl键是否被按下的状态?使用情况是在异步初始化时根据修改键的状态设置控件的属性。 - Dan Dascalescu
在JavaScript的事件模型中,您需要检查CTRL按钮是否按下。当释放键时,会返回keypressed事件;并非所有浏览器似乎都会为CTRL、SHIFT等修饰键生成此类keypressed事件。 - db-inf

8

我使用这个,效果很好

<a  href="" onclick="return Details(event)" ></a>

function Details(event) {
            if (event.ctrlKey) {
                alert('Ctrl down');
            }
}

1
这个回答有什么新的补充吗?这个回答有什么更好的地方,或者说有什么实质性的不同之处吗? - Dan Dascalescu
不同的要求是什么?当这个页面出现在谷歌搜索中时,所有答案都会显示出来,而不仅仅是这一个。所以我的问题仍然存在。 - Dan Dascalescu
2
这是对已接受答案的有益补充,因为它是从HTML中添加事件处理程序,而不是在JavaScript内部添加。 - cmyr
1
@cmyr 我持不同意见,从HTML中设置事件处理程序是一种安全风险,应该使用CSP策略禁止。 - Ruan Mendes

6
我使用cntrlIsPressed全局标志完成了它;同时,使用Control + A也可以选择所有选项。
// Check whether control button is pressed
$(document).keydown(function(event) {
    if (event.which == "17")
        cntrlIsPressed = true;
    else if (event.which == 65 && cntrlIsPressed) {
        // Cntrl+  A
        selectAllRows();
    }
});

$(document).keyup(function() {
    cntrlIsPressed = false;
});

var cntrlIsPressed = false;

2
这是一个很好的解决方案,适用于那些想要在键事件处理程序之外检查CTRL是否按下的人。 - Mr. TA
2
可以使用 window.event.ctrlKey 替代此方法。 - Mikael Dúi Bolinder
1
@galdikas:例如在控件的初始化中,如果按下了Ctrl键,您可能希望设置不同的属性(例如精细选择与粗略选择)。 - Dan Dascalescu
3
@MikaelDúiBolinder:MDN 不建议使用 window.event - Dan Dascalescu
3
@Sacky:在keyup事件上设置cntrlIsPressed = false;的逻辑是不正确的,因为用户可能会按下Ctrl +其他键,然后释放另一个键(这将生成keyup事件),而Ctrl仍然处于按下状态。此外,在这里使用jQuery过度了。 - Dan Dascalescu
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接