如何检测用户在输入框中按下回车键

55

我只有一个输入字段,我想注册onChange和onKeyPress事件来检测用户何时完成输入或按下Enter键。我需要仅使用JavaScript实现。谢谢帮助。

我有:

var load = function (){
   //I want to trigger this function when user hit Enter key.
}

document.getElementById('co').onchange=load;   //works great
document.getElementById('co').onKeyPress=load; 
//not sure how to detect when user press Enter

HTML

//no form just a single input field
<input type='text' id='co'>

重复的问题 https://stackoverflow.com/q/7060750/14264568 的副本。 - undefined
8个回答

88
document.getElementById('foo').onkeypress = function(e){
    if (!e) e = window.event;
    var keyCode = e.code || e.key;
    if (keyCode == 'Enter'){
      // Enter pressed
      return false;
    }
  }

DEMO


附加问题。在检测到用户按下回车键后,如何访问foo元素?我不能使用this关键字,它指的是窗口对象。非常感谢。 - FlyingCat
12
我会使用 if (keyCode === 13) 进行严格相等比较。 - bobbyrne01
1
抱歉,请问第一个if的目的和意义是什么?if (!e) - 谢谢 - Robert
1
@Robert 这意味着如果 e 未定义,我们将从 window.evente 赋值。 - ridoansaleh
2
现在"keyCode"和"which"都已经被弃用了。使用"code"或者"key",并将其与字符串值"Enter"进行比较。 - Vorpal
1
可能更改为: if (keyCode == 'Enter' || keyCode == 'NumpadEnter') - Johnny

19

到目前为止,这些答案都没有具体回答这个问题。这个问题有两个部分。1.按下Enter键。2.使用者专注于输入框。

Jquery

$('#input-id').on("keyup", function(e) {
    if (e.keyCode == 13) {
        console.log('Enter');
    }
});

纯 JavaScript

inputId = document.getElementById('input-id');
inputId.addEventListener('keyup', function onEvent(e) {
    if (e.keyCode === 13) {
        console.log('Enter')
    }
});

只有在用户从该输入框中按下回车键时,才会检测到回车键。


14

更近期而且更加清晰明了:使用 event.key 代替 event.keyCode不再需要任意数字编码!

const node = document.getElementById('co');
node.addEventListener('keydown', function onEvent(event) {
    if (event.key === "Enter") {
        return false;
    }
});

Mozilla 文档

支持的浏览器


7
为了实现跨浏览器兼容性:
document.getElementById('foo').onkeypress = function(e) {
    var event = e || window.event;
    var charCode = event.which || event.keyCode;

    if ( charCode == '13' ) {
      // Enter pressed
      return false;
    }
}

更多细节请参见此问题:javascript事件e.which?


1

0

我使用这段代码,它运行良好:

document.getElementById("theIdHere").onkeypressed = 
function() {
     if(this.event.which === 13)
        console('passed');
}

0

0

现在你可以这样做:

document.getElementById('co').addEventListener('keydown',
  e => !e.repeat && e.keyCode === 13 && load());

请注意,load() 只会运行一次。

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