Javascript html键码在firefox中不起作用

Javascript html键码在firefox中不起作用,javascript,html,Javascript,Html,我有以下代码: function noNumbers(e) { var charCode = (e.which) ? e.which : ((e.charCode) ? e.charCode : ((e.keyCode) ? e.keyCode : 0)); if((charCode < 48 || charCode > 57) && (charCode > 45 ||

我有以下代码:

function noNumbers(e)
{
    var charCode = (e.which) ? e.which : 
                 ((e.charCode) ? e.charCode : 
                   ((e.keyCode) ? e.keyCode : 0));
    if((charCode < 48 || charCode > 57) && (charCode > 45 || charCode < 47))
        e.preventDefault();
}
函数非编号(e)
{
var charCode=(e.which)?e.which:
((e.charCode)?e.charCode:
((e.keyCode)?e.keyCode:0));
如果((字符码<48 | |字符码>57)和&(字符码>45 | |字符码<47))
e、 预防默认值();
}
其目的是使用户可以键入数字、退格键和删除键。它适用于Chrome和IE,但在firefox中,您可以只键入数字,而不是退格键或删除键


JSfiddle:

这对我在Firefox上很有效

var-keycodes={
“退格”:8,
“删除”:46,
“左箭头”:37,
“向右箭头”:39,
“数字1”:48,
“数字9”:57
};
函数非数(e)
{
var charCode=e.哪个?e.哪个:
(e.charCode?e.charCode:
(e.keyCode?e.keyCode:0));
if((字符码keycodes.number9)&&
charCode!==keycodes.delete&&
charCode!==keycodes.backspace&&
charCode!==keycodes.leftArrow&&
charCode!==keycodes.rightArrow)
e、 预防默认值();
}
document.getElementById('noNum')。addEventListener(
“按键”,非数字
);

您只需添加
console.log(e)并调试发生的情况:

Chrome/IE在按下
Backspace
Delete
键时不调用此功能。Firefox分别记录
keypress{target:,key:“Backspace”,charCode:0,keyCode:8}
keypress{target:,key:“Delete”,charCode:0,keyCode:46}
。因此有两种解决方案:

1) 为这些
keyCode
s(8和46)添加
if

2) 不要使用
keypress
事件,而是使用
keydown
(如@Teemu所写)。

为什么不处理事件?此方法将通过键盘输入、剪切、粘贴等方式处理实时更改

(函数(){
var textBox=document.getElementById(“文本框”);
textBox.addEventListener(“输入”,函数(e){
var val=此.val值,
rx=/[^\d]/g;
如果(接收测试(val)){
var pos=this.selectionStart;
this.value=val.replace(rx,“”);
this.selectionStart=pos;
this.selectionEnd=pos-1;
}
});
})();

以下是JSFIDLE:在firefox中仍然不起作用。事实上,这样做,打破了它的chrome和IE相同的方式。我不希望用户能够键入的信。?完美地为我在所有3个浏览器,谢谢!虽然我不能确切地告诉您为什么在这个实例中允许这样做,但我们希望用户在第一时间正确地输入数据,如果他们粘贴的数据与预期的数据不同,他们就会不知所措。