【问题标题】:Blocking special characters with "keyup" vs "keydown" vs "keypress"用“keyup”、“keydown”和“keypress”阻止特殊字符
【发布时间】:2017-10-01 23:02:55
【问题描述】:

我试图将文本框输入仅限于数字 0-9,而不使用正则表达式。而且,下面是我的代码:

$("input[type='text']").on('keypress', function(e){
  if(e.which>=48 && e.which<58){
      return true;
  }else{
      return false;
  }
})
<input type="text">

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

我的问题是:“在这种情况下,为什么只有 keypress 可以防止输入特殊字符?”

【问题讨论】:

  • 顺便说一下html中有type=number,你可以使用
  • 我可以使用 但我不喜欢文本框最末端的小增加/减少箭头。

标签: jquery events keypress


【解决方案1】:

keypress 不会返回相同的密钥代码。例如,如果您将console.log(e.which) 添加到函数并按退格键,则不会触发任何内容。但是,如果您按另一个键,它会。此外,keypress 将“shift + number”组合检测为奇数键码,因此它们在您的函数中返回 false。例如,“shift + 1”返回 33,但 33 应该表示“向上翻页”。

keyup 不起作用,因为字符在 keydown 上呈现,因此 keyup 为时已晚。 (如果没有keydown 首先发生,就不能有keyup 事件。)

keydown 不会阻止特殊字符,因为这些特殊字符需要组合 keydown/keup 事件(shift 加数字)。因此,即使按住 shift 键并返回 false,只要按下数字,keydown 就会返回 true。为了解决这个问题,您需要map 他们来检测此处描述的组合:Detect multiple keys on single keypress event in jQuery

【讨论】:

  • 使用“keydown”可以输入非数字字符:!@#$%^&*()。此外,它可以防止使用“退格键/删除键/导航箭头”,我希望这些键能够工作!
  • 这比你原来的问题更清楚。答案已更新。
  • 谢谢。所以那是“Shift”键搞砸了:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-20
  • 1970-01-01
  • 1970-01-01
  • 2016-11-24
  • 1970-01-01
  • 2014-02-13
  • 2019-02-19
相关资源
最近更新 更多