需求
为避免用户输入非法数据,希望能对某些输入框的输入做限制。这里用价格输入框(只允许输入最多2位小数的非负数值)
来做例子:
1
| <input type="text" id="price" name="price" placeholder="请输入价格(最多2位小数)" required>
|
键盘事件处理代码(javascript)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| $(function(){ $('#price').keypress(onPriceKeypress).keyup(onPriceKeyup); function onPriceKeypress(e){ var allowKeys = '0123456789+.'; var keyCode = e.which; if (code<32 || (code>126 && code<160)){ return true; } if (allowKeys.indexOf(String.fromCharCode(code))<0){ return false; } return true; } function onPriceKeyup(e){ var $ipt = $(this), val = $ipt.val(); if (!/^[+\d]?\d*\.?\d{0,2}$/.test(val)){ $ipt.val(/[+\d]?\d*\.?\d{0,2}/.exec(val)); } } }
|
注:
- 只在input使用pattern属性(如:
pattern="[+\d]?\d*\.?\d{0,2}"
)只能限制最后的结果,不能限制输入不当的字符。
- 把input的type设为number可限制只能输入数字,但无法输入小数。
- 在有些浏览器(如Firefox)下控制字符也会触发keypress事件,待textinput事件普及后改用该事件就不用做特殊处理了。