用 "keyup" vs "keydown" vs "keypress" 阻止特殊字符



我试图将文本框输入仅限为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不会返回相同的密钥代码。例如,如果将console.log(e.which)添加到功能并按下Backspace,则不会发射。但是,如果您按另一个键,它将。另外,Keypress将" Shift Number"组合视为奇数键编码,因此它们在您的功能中返回False。例如," Shift 1"返回33,但33应该表示"页面"。

keyup不起作用,因为字符是在键盘上呈现的,因此,密钥up为时已晚。(如果没有keydown,您就无法进行keyup事件。)

keydown不能阻止特殊字符,因为这些特殊字符需要键盘/KEUP事件(Shift Plus Number)的组合。因此,即使按下偏移键并返回false,keydown即使按下数字也会返回真实。为了解决您需要map的内容,如下所述:在JQuery

中检测多个键:检测多个键

最新更新