Joh*_*ny5 9 javascript jquery numeric keypress keydown
我需要设置一个<input type="text" />只接受数字字符,退格,删除,输入,制表符和箭头的字符.
那里有很多例子,我从类似的东西开始:
function isNumericKeyCode (keyCode){
return ( (keyCode >= 48 && keyCode <= 57) //standard keyboard
||(keyCode >= 96 && keyCode <= 105)) //Numpad
}
$('#myTextBox').keydown(function(e){
var handled = true;
var keyCode = e.keyCode;
switch(keyCode){
//Enter and arrows
case 13:
case 37:
case 38:
case 39:
case 40:
doSomethingSpecialsWithThesesKeys();
break;
default:
handled = false;
break;
}
if ( !handled
&& keyCode !== 8 //backspace
&& keyCode !== 9 //tab
&& keyCode !== 46 //del
&& !isNumericKeyCode(keyCode)){
handled = true;
}
return handled;
});
Run Code Online (Sandbox Code Playgroud)
所有这一切都完美无缺,直到我按下"#"键.在我的法语加拿大键盘中,"#"有自己的键(没有隐含的移位)返回keyCode 51,与数字"3"相同.
我认为在美国键盘中,通过按shift + 3获得"#",这可能就是他们拥有相同键码的原因.
现在我意识到我必须处理shift和alt键,但这是另一个故事.
它与jquery keypress事件的工作方式不同,后者提供了charCode属性,但我最初没有使用它,因为文档说的是:
由于任何官方规范都没有涵盖按键事件,因此在使用它时遇到的实际行为可能因浏览器,浏览器版本和平台而异.
此外,在这种情况下,我需要一种解决方法来处理制表符,箭头和其他特殊键,因为它们不提供charCode.
所以问题是: 有没有办法只允许使用keydown事件的某些特定字符?那么,以某种方式独立于键盘布局工作?
作为一个侧面任务:哪些浏览器可能与keypress事件有关?我的意思是,目前我并不关心我的网站是否不支持IE6.我的目标是最近的浏览器.
正如有人在评论中指出的那样,这种方法不允许用户在输入中"ctrl + v"一个数字.在我的特殊情况下,这不是一个能够粘贴数字的要求.但是这突然出现在我的脑海中,用户仍然能够正确地复制输入中的一些文本,在这种情况下可能是任何东西.我越想它,我就越需要keydown事件来处理标签和箭头,以及另一个事件来处理输入本身.
这里有很多漂亮的答案,但是奖项由mrtsherman使用input和propertychange事件.我将使用这个答案的组合进行数字验证,并keyCode像以前一样使用箭头,制表符和输入键的特殊用途.
像这样的事情怎么样?这应该涵盖剪切/粘贴以及人民币内容。我们监视文本框内容的任何变化。然后我们使用正则表达式根据白名单过滤掉字符。这不会处理非字符键,但我认为没关系。
该\d标志表示仅应接受数字。
$('#myTextBox').bind('input propertychange', function() {
var text = $(this).val();
if (isNaN(text)) {
$(this).val(text.replace(/[^\d]/gi, ''));
}
});
Run Code Online (Sandbox Code Playgroud)
我们在这里绑定两个事件。FireFox 的输入和其他浏览器的 propertychange。
| 归档时间: |
|
| 查看次数: |
5463 次 |
| 最近记录: |