为什么我可以在keydown上阻止默认事件但不能在使用Javascript的keyup上阻止?

使用.keydown我可以捕获keydown事件,然后检查并阻止默认操作(显示字符)。

使用.keyup我不能?

我知道事件被捕获为alert()当代码在条件内时触发但preventDefault()不会阻止该操作。

这是一个完整的DEMO

keyup事件中,字符已被键入且无法撤消,但在keydown没有输入任何内容且浏览器有意输入字符,因此您可以取消浏览器意图。

无论何时键入字符,都会发生以下事件:
keydown – >( keypress – >(输入操作))反复发生,直到释放密钥 – > keyup

  • keydown – >可以防止 – >解雇时: 一个键
  • keypress – >可以防止 – >触发时: 按住
  • keyup – > 无法阻止 – >解雇时: 释放一个键

命中键时会触发keydown()事件,这意味着可以在释放键之前执行代码。

当按下键时代码可以阻止一个动作,因为它还没有发生,而在keyup()事件中它已经有了。

例如,当触发keyup()时,一个字符已被插入到输入字段中

通常,keydown和keyup生成相同的密钥代码(当与给定事件一起使用时)但是keypress会给你按下的物理密钥(返回的是ASCII代码而不是keyCode)