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个浏览器,谢谢!虽然我不能确切地告诉您为什么在这个实例中允许这样做,但我们希望用户在第一时间正确地输入数据,如果他们粘贴的数据与预期的数据不同,他们就会不知所措。