jQuery - 检测 ENTER 键的 keydown / keypress / keyup 事件?

51

试图让 jQuery 检测回车输入,但检测到空格和其他按键,却无法检测回车。以下有何问题:

$("#entersomething").keyup(function(e) {
    alert("up");
    var code = (e.keyCode ? e.keyCode : e.which);
    if (code==13) {
        e.preventDefault();
    }

    if (code == 32 || code == 13 || code == 188 || code == 186) {
        $("#displaysomething").html($(this).val());
});

<input id="entersomething" />
<div id="displaysomething"&gt;&lt;/div&gt;

http://jsfiddle.net/zeRrv/


1
为了移动设备的支持和简洁性,请使用 event.key 而不是 event.which/keyCode(它们已经过时)。 - oriadam
是的,我问这个问题已经快10年了。很高兴知道jQuery仍然存在并不断发展! - ina
4个回答

98

JavaScript/jQuery

$("#entersomething").keyup(function(e){ 
    var code = e.key; // recommended to use e.key, it's normalized across devices and languages
    if(code==="Enter") e.preventDefault();
    if(code===" " || code==="Enter" || code===","|| code===";"){
        $("#displaysomething").html($(this).val());
    } // missing closing if brace
});

HTML

<input id="entersomething" type="text" /> <!-- put a type attribute in -->
<div id="displaysomething"></div>

1
@balupton - 我应该补充说明,在jQuery中event.which已经被规范化,在jQuery.event.fix函数中。 - Russ Cam
请注意,which现在已被弃用。https://developer.mozilla.org/zh-CN/docs/Web/API/KeyboardEvent/which - Juxhin
@Juxhin在废弃通知上是正确的。历史上,IE使用event.keyCode开始,然后--moz和--webkit家族推出了event.which。这两者现在都已经被废弃,还有event.charCode也一样。现在唯一的选择是event.key,但是--moz家族目前不支持它。 - Abel Callejo
1
@oriadam 可以自由编辑答案,提供更好的选项。 - Russ Cam
1
@Zaz 使用 ev.key 而不是 ev.keyCode 是与浏览器API有关,而不是jQuery。 - oriadam
显示剩余4条评论

5
更新:现今我们有移动和自定义键盘,我们不能继续信任这些任意的按键代码,如13和186。换句话说,请停止使用 event.which/event.keyCode,开始使用 event.key
if (event.key === "Enter" || event.key === "ArrowUp" || event.key === "ArrowDown")

3

我认为你会在keyup事件上遇到困难 - 因为它首先触发keypress事件 - 如果你想排除Enter键,你将无法停止第二个事件的传播。


1

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