【问题标题】:Why can I preventDefault event on keydown but not on keyup with Javascript?为什么我可以在 keydown 上阻止 Default 事件,但不能在使用 Javascript 的 keyup 上?
【发布时间】:2013-10-30 17:11:39
【问题描述】:

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

当使用.keyup时我不能?

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

这是一个完整的DEMO

【问题讨论】:

  • keyup 的操作不是向字段添加字符。那已经过去了。
  • 应该很明显,当keyup事件触发时,按键被释放,输入已经存在`
  • 你可能想捕获keypress
  • 只要告诉自己,当你保持一个关键点时会发生什么?它做这个

标签: javascript jquery


【解决方案1】:

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

每当您键入一个字符时,都会发生以下事件:

keydown --> keypress 重复直到按键被释放 --> keyup

  • keydown -> 可以防止 -> 按下
  • 时触发
  • keypress -> 可以防止 -> 在按住键时触发
  • keyup -> 无法阻止 -> 释放
  • 时触发

【讨论】:

  • input 呢?
【解决方案2】:

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

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

例如触发keyup()时,输入字段中已插入字符

一般来说,keydown 和 keyup 产生相同的键码(当与给定事件一起使用时) 但是 keypress 会为您提供按下的物理键(返回 ASCII 码而不是 keyCode)

【讨论】:

    猜你喜欢
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 2019-11-04
    • 2011-08-26
    • 2014-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多