jQuery“keyup”vs“keydown”vs“keypress”

时间:2017-10-01 23:02:55

标签: jquery events 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>

我的问题是:“在这种情况下,为什么只有按键会阻止输入特殊字符?”

1 个答案:

答案 0 :(得分:2)

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

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

keydown不会阻止特殊字符,因为这些特殊字符需要组合keydown / keup事件(shift加数字)。因此,即使按住shift键并返回false,map也会在按下数字后立即返回true。为了解决这个问题,您需要$file = $request->file('image'); if ($request->hasFile('image')) { $image = $request->file('image'); $filename = 'food' . '-' . time() . '.' . $image->getClientOriginalExtension(); $location = public_path('images/'. $filename); Image::make($image->getRealPath())->resize(800, 400)->save($location); } 他们来检测此处所述的组合:Detect multiple keys on single keypress event in jQuery