我正在尝试深入解决当您在网页输入文本字段中按shift+Enter时JavaScript中到底发生了什么。
问题是,shift+Enter 事件在流行的移动操作系统上似乎以某种方式灾难性地不受支持。
如果我理解正确,这是大多数设备上的假定事件表:
https://w3c.github.io/uievents/tools/key-event-viewer.html
以上正确情况验证于:
这是如何测试的(结果相同):
但是,在带有虚拟键盘的手机上,shift+enter 似乎未被检测到:
https://w3c.github.io/uievents/tools/key-event-viewer.html
以上问题情况转载于:
(股票键盘有APK包名称
com.android.inputmehtod.latin
所以我认为它的源代码可能是这个,如果需要更多调查:https://android.googlesource.com/platform/packages/inputmethods/LatinIME/ )
是的,你的问题似乎与大多数安卓手机的默认键盘有关。
com.android.inputmethod.latin
)很有可能你的安卓有这个键盘,所以,你很可能受到影响。
正如用户@padeso所提到的,可能根本原因是Android AOSP键盘的后端不支持多键事件,即使它的前端看起来像。您可能有兴趣在 Google 问题跟踪器上关注此错误报告:
https://issuetracker.google.com/issues/276611340
没有仅 JavaScript 的解决方法来检测 shift+Enter 组合,并且实际上没有“替代事件”来检测它。唯一具体的解决方法是联系您的 Android 用户放弃他们默认的 AOSP 键盘并安装一个更稳定的键盘,但是 - 显然 - 这不是一个可行的选择。
目前,可能有超过 10 亿台 Android 设备受到此问题的影响。这不是 JavaScript 开发人员应该反对的事情。放弃吧
我的建议是:避免在手机上依赖这两种情况的区别。因此,请避免使用“使用 Enter 发送”和“使用 shift+Enter 添加换行符”之类的东西。在移动设备上,确保 Enter 键始终只是添加一个换行符,并确保有一个专用按钮来“提交”数据。