【问题标题】:What should I use instead of the deprecated KeyboardEvent.which and KeyboardEvent.keyCode?我应该使用什么来代替已弃用的 KeyboardEvent.which 和 KeyboardEvent.keyCode?
【发布时间】:2019-10-01 19:26:27
【问题描述】:

我正在尝试将 jQuery 从现有代码库中剥离出来,作为现代化/优化计划的一部分。当用户在文本输入中点击enter 键时,有一些地方需要发生一些事情。之前,我们通过以下方式实现了这一点:

$("#loginInput").on("keypress", e => {
   if (e.which == 13) {
     // if key pressed was enter...
     login();
   }
});

不过,通读键盘事件APIhere,我发现大部分常用的API都已弃用,例如KeyboardEvent.whichKeyboardEvent.keyCode

尽管这些属性在大多数浏览器中仍然可用,但我对使用已弃用的 API 感到不舒服。我应该改用什么?

【问题讨论】:

  • 这不清楚吗? “警告:此属性已弃用;如果可用,您应该改用 KeyboardEvent.key。”
  • @str 是的,当时还不清楚。由于某种原因,我的大脑没有将获取 KeyboarEvent.key 的结果和使用它的实际值而不是依赖于先前的 KeyboardEvent.which 或 KeyboardEvent.keyCode 之间的点连接起来。在看到 e.which 这么久之后,我期待一个数字结果。对你来说一目了然的事情可能不适合其他人。

标签: javascript


【解决方案1】:

我想你想要event.key。它似乎得到了广泛的支持。

“key”属性给出了用户与键盘交互所反映的字符,同时考虑了所有涉及的元键(shift、ctrl 等)。

所以要检查回车符 (13),您可以使用

if (event.key === "Enter") {
  // enter key was pressed
}

edit 已更新,以反映当该键触发事件时“key”属性设置为字符串“Enter”这一有点令人惊讶的事实。

【讨论】:

  • 我认为您需要检查"Enter" 而不是"\n"according to MDN。我试图为您的帖子添加编辑,但我认为它已被覆盖。
  • @Pointy 感谢您的回答,但没必要那么……狡猾。如果这是微不足道的,我就不会问了。
  • @db2 ??我不是要刻薄,我为冒犯而道歉。我不确定你的意思。
  • event.key && event.key === "Enter" 是多余的。如果 event.key 是“Enter”,那么它显然是真的。我想你想写 if (event && (event.key === "Enter"))
  • @LajosArpad 说得好;当我误以为 event.key 将是 Unicode 字符而不是描述性字符串时,代码最初是不同的。有人打电话给.charCodeAt()
猜你喜欢
  • 2016-08-10
  • 1970-01-01
  • 2020-01-18
  • 2012-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多