【问题标题】:Need to print the character as received in keydown event需要打印 keydown 事件中收到的字符
【发布时间】:2012-11-29 19:16:04
【问题描述】:

我有一个按键事件。我可以从中取出keyCode。 我希望首先使用event.preventDefault 阻止默认设置,然后在进行一些条件检查后,将与键码对应的字符打印回光标实际所在的位置。

我想我可以使用

检索正确的字符
var character = String.fromCharCode(e.charCode);

但是我如何将它打印回 iframe 正文,同时考虑到我可能需要在不干扰光标位置的情况下插入这个字符来呈现文本

【问题讨论】:

  • 我认为,您应该只在您拥有的那些特殊条件下使用preventDefault。使用 preventDefault 然后稍后插入文本会使问题复杂化。没有可靠的方法可以从他们的 keyCode 中获取确切的字符,因为它因不同的浏览器和不同的键盘类型而异。检查此stackoverflow.com/a/13127566/297641 答案以获得解决方法。

标签: jquery keypress keydown preventdefault


【解决方案1】:

您应该只在您拥有的那些特殊条件下执行preventDefault。使用preventDefault 然后稍后插入字符只会使问题复杂化(获取插入符号位置,插入字符然后设置插入符号位置)。

我认为没有一种可靠的方法可以从他们的 keyCode 中获取确切的字符,因为它因不同的浏览器和不同的键盘类型而异。

查看此https://stackoverflow.com/a/13127566/297641 答案以获得解决方法。

【讨论】:

  • 如果您获取该字段的当前值,然后将其与具有 0 毫秒延迟的 setTimeout 内的值进行比较,您可能能够可靠地获取确切的字符。您还必须考虑复制/粘贴、退格、箭头键、转义、制表符等的可能性。
  • @KevinB 我们如何从e.which可靠地获得onkeydown的当前值?
  • @KevinB 我不确定.. 我试图理解您在第一条评论中提到的逻辑 如果您获得该字段的当前值然后将其与setTimeout 中的值,延迟为 0ms
  • 你应该能够看到我删除的答案,基本上你会在 setTimeout 之外获得按键之前的值,然后是由于 setTimeout 内部的按键而改变的值。您可以比较这两个值以找出差异。例如,如果按下了a 键,则该值将在值的某处有一个新的a 字符。
  • 作为参考,我对 keydown 所做的正是 jQuery UI 自动完成所做的,以使其感觉如此之快。如果他们等待按键,则获得结果的延迟会更大。
猜你喜欢
  • 2017-04-05
  • 1970-01-01
  • 2012-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-30
相关资源
最近更新 更多