【问题标题】:How do I determine the key that caused a textbox input event to fire?如何确定导致文本框输入事件触发的键?
【发布时间】:2014-05-24 15:42:04
【问题描述】:

如果我有一个文本框,

<input id='Sub' type='text'>

每次输入变化时我都可以捕捉到:

sub = document.getElementById('Sub');
sub.addEventListener('input', function(e) {
    // here the contents of the textbox is accessible via this.value
    ...
}, false);

我想确定 backspacedelete 何时是输入触发的原因,以便我可以专门处理它们。据我所知,ethis 都不会暴露被按下以导致输入事件触发的键。有什么方法可以找出钥匙是什么?

【问题讨论】:

  • 因为 oninput 事件会触发许多事件,例如粘贴、更改等。它没有 keyCode/which,因为对于触发事件,如果需要,请改用 key* 事件。

标签: javascript input dom-events keypress


【解决方案1】:

“输入”不是您要捕获的事件。你必须赶上“按键”事件。然后就可以看到“e.keyCode”了:

var sub = document.getElementById('Sub');
sub.addEventListener('keypress', function(e) {
    console.log(e.keyCode)
}, false);

这是一个小演示:http://jsfiddle.net/9LZ9Z/

【讨论】:

  • 如果我也想捕获粘贴怎么办?
  • 但这不会是关键吧(你可以用鼠标粘贴)?
  • 正确。我希望一个函数在输入事件触发时运行(无论是由于字符按下还是粘贴),但如果它来自 事件则不运行。所以我想识别函数中的 键。
  • 我建议捕获单独的事件“keypress”(甚至可能是“keydown”以获得更精细的控制)“paste”等并对它们做出相应的反应,因为它们的事件对象提供不同的信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多