e.keyCode 在 iOS Safari 中的 keyup 事件

e.keyCode in iOS Safari on keyup event

更新

到目前为止,我一直在模拟器中尝试使用物理键盘。那是造成问题的原因。但是,使用软键盘,它可以按需要工作。 keyup 事件定义明确 keyCode.


请在 this pen

找到代码

<input type="text" id="test">

var test = document.getElementById('test'); test.addEventListener('keyup', function(e) { alert(e.keyCode); });

iOS safari 将 0 显示为任何按键的键码(keyup 事件)。任何指针都会非常有帮助。

更新

e.keyCode 以及 e.which 适用于 keypress 事件,但我无法使其适用于 keyup 事件。

使用 e.which 而不是 e.keyCode

编辑:要标准化此值,您可以使用e.keyCode || e.which.

e.keyCode 存在于 iOS Safari 中的 keyup 事件中,在实际设备和模拟器中。 但是在模拟器中,如果使用物理键盘e.keyCode设置为zero

我能够通过使用 e.key 来使它与 keyupkeydown 一起工作,其中 returns 按下的键(例如 /a).

我能够通过使用远程调试器检查事件对象来解决这个问题。

我检查了最新的 Chrome、Firefox、iOS Safari 和 macOS Safari,它们都通过 e.key 报告密钥。

编辑:

keyupkeydown 现在不工作。我想我用远程调试器之类的东西出了问题。但是,我找到了适用于我的用例的替代解决方案。

我想在按下 / 时聚焦输入。我采用了上述绑定到 keypress 的解决方案,但由于 keyup 事件尚未触发,因此密钥已输入到输入中。只需调用 e.preventDefault() 就很好地解决了我的问题。我仍然可以在 e.key == '/' 上匹配 keypress 事件!