【问题标题】:Prevent holding keyboard pressed in textarea防止在文本区域中按住键盘
【发布时间】:2016-10-29 16:05:14
【问题描述】:

我需要用户将文本作为每个按键一个字母插入到文本区域中,因此如果按住某个键,它将只写一个字母('a')而不是多个字母('aaaaaaaaaaaaaaaaaaaa')。要输入最后一个字符串,用户必须多次按下释放键盘按钮。

这可能吗?

可以使用Javascript和JQuery。

谢谢!

【问题讨论】:

  • 不,不可能。
  • @ASDFGerte:哦,我敢打赌。
  • 我很好奇:为什么你需要禁用这个标准功能?
  • @T.J.Crowder 继续按的输入法可能在驱动程序级别或更难的部分处理,我怀疑你可以从 javascript 访问那些?例如。一些游戏键盘允许在驱动程序上进行不同的设置,并且只向前按一次,怎么可能覆盖这个?
  • @ASDFGerte:如果我们要进入与操作系统有关的定制键盘,那当然会是个问题。但在正常情况下,浏览器会为keydownkeyupkeypress 提供离散事件。我在下面添加了一个答案(但仍然认为这样做不是一个好主意:-))。

标签: javascript jquery textarea keypress


【解决方案1】:

警告:我强烈建议不要这样做,尤其是因为可能会给使用辅助技术的用户带来意想不到的后果。

您可以观看keypresskeyup 并禁止进一步的keypress 事件,直到您看到keyup。请注意,这不会阻止他们按住一个键并切换某些 other 键(如 ShiftCtrl),但它确实需要它们切换一些键:

var preventKeypress = false;
$("textarea")
  .on("keyup", function() {
    // Allow keypresses again
    preventKeypress = false;
  })
  .on("keypress", function(e) {
    if (preventKeypress) {
      // Disallow it
      e.preventDefault();
    } else {
      // Allow it, but then disallow until we next see keyup
      preventKeypress = true;
    }
  });
<textarea rows="5" cols="50"></textarea>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

我并不是说它是万无一失的,或者一个好主意... :-)

【讨论】:

  • 谢谢,非常聪明的解决方案!我也不建议这样做,但这只是为了一个奇怪的浏览器游戏。再次感谢!
猜你喜欢
  • 2016-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-14
  • 2017-11-24
  • 1970-01-01
相关资源
最近更新 更多