首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在不在页面上放置输入元素的情况下捕获按键?

在不在页面上放置输入元素的情况下捕获按键?
EN

Stack Overflow用户
提问于 2010-05-21 09:11:54
回答 6查看 114.9K关注 0票数 86

如何在JavaScript中不在页面上放置输入元素的情况下捕获按键操作,例如Ctrl+Z?似乎在IE中,keypress和keyup事件只能绑定到输入元素(输入框、文本框等)

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-05-21 09:45:02

jQuery也有一个极好的实现,非常容易使用。下面是如何跨浏览器实现此功能的方法:

代码语言:javascript
复制
$(document).keypress(function(e){
    var checkWebkitandIE=(e.which==26 ? 1 : 0);
    var checkMoz=(e.which==122 && e.ctrlKey ? 1 : 0);

    if (checkWebkitandIE || checkMoz) $("body").append("<p>ctrl+z detected!</p>");
});

在IE7、火狐3.6.3和Chrome 4.1.249.1064上测试

另一种方法是使用keydown事件并跟踪event.keyCode。然而,由于jQuery使用event.which标准化了keyCode和charCode,因此他们的规范建议在各种情况下使用event.which:

代码语言:javascript
复制
$(document).keydown(function(e){
if (e.keyCode==90 && e.ctrlKey)
    $("body").append("<p>ctrl+z detected!</p>");
});
票数 42
EN

Stack Overflow用户

发布于 2010-05-21 16:38:54

对于可能在浏览器中触发某些操作的不可打印键(如箭头键)和快捷键(如Ctrl-z、Ctrl-x、Ctrl-c ),您可能无法在所有浏览器中获得按键事件。因此,如果您对禁止浏览器的默认操作感兴趣,则必须使用keydown。如果不是,keyup也会做得很好。

keydown事件附加到document在所有主要浏览器中都有效:

代码语言:javascript
复制
document.onkeydown = function(evt) {
    evt = evt || window.event;
    if (evt.ctrlKey && evt.keyCode == 90) {
        alert("Ctrl-Z");
    }
};

要获得完整的参考资料,我强烈推荐Jan Wolter's article on JavaScript key handling

票数 73
EN

Stack Overflow用户

发布于 2018-02-19 03:12:24

对于现代JS,请使用event.key

代码语言:javascript
复制
document.addEventListener("keypress", function onPress(event) {
    if (event.key === "z" && event.ctrlKey) {
        // Do something awesome
    }
});

注意:旧的属性(.keyCode.which)已弃用。

Mozilla Docs

Supported Browsers

票数 27
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2878983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档