我试图将文本框输入限制为仅限数字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>
我的问题是:“在这种情况下,为什么只有按键会阻止输入特殊字符?”
答案 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