【问题标题】:Keypress not responding to character codes [duplicate]按键不响应字符代码[重复]
【发布时间】:2015-12-07 15:45:19
【问题描述】:
$(document).keypress(function(e) {
    if(e.which == 32) {
        alert('You pressed spacebar!');
    }
});

$(document).keypress(function(e) {
    if(e.which == 13) {
        alert('You pressed enter!');
    }
});

$(document).keypress(function(e) {
    if(e.which == 40) {
        alert('You pressed down arrow!');
    }
});

这是我的 javascript 文件。没有 CSS,HTML 只是一个空白的骨架。

它可以很好地读取回车键和空格键,但是向下箭头、向上箭头或我按下的几乎所有未输入或空格键都没有注册的键?

如何解决这个问题?

感谢任何帮助。

【问题讨论】:

标签: javascript jquery keypress


【解决方案1】:

箭头键不会生成keypress 事件。它们生成keydownkeyup 事件。

请注意,虽然字母键确实会生成 keypress,但 which 的值可能不是您期望的值。例如,在我的浏览器和操作系统上,按 a 键会生成which = 65,这是A 的字符代码,而不是a。键码是key码,而不是字符码。更多关于this no-longer-maintained, but still quite useful, page

实时示例: (我添加了一个return false 以防止默认处理,因为否则堆栈片段窗口会滚动,但这不是接收事件所必需的)

$(document).keypress(function(e) {
    if(e.which == 32) {
        display('You pressed spacebar!');
        return false;
    }
});

$(document).keypress(function(e) {
    if(e.which == 13) {
        display('You pressed enter!');
        return false;
    }
});

$(document).keydown(function(e) {
    if(e.which == 40) {
        display('You pressed down arrow!');
        return false;
    }
});

function display(msg) {
  $("<p>").text(msg).appendTo(document.body);
}
p {
  margin: 0;
}
<p>Click this pane to focus it, then press spacebar, Enter, or down-arrow</p>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

【讨论】:

猜你喜欢
  • 2020-01-20
  • 2012-12-22
  • 1970-01-01
  • 2012-10-25
  • 1970-01-01
  • 2011-09-04
  • 2017-10-24
  • 1970-01-01
  • 2018-11-12
相关资源
最近更新 更多