Javascript iPhone返回相同的按键事件(散列和3)和(星号和8)

Javascript iPhone返回相同的按键事件(散列和3)和(星号和8),javascript,iphone,events,keycode,Javascript,Iphone,Events,Keycode,我正在进行电话验证,需要使用电话号码自动格式化输入,并且只允许添加数字字符。然而,当我尝试使用keydown和keypress限制输入时,IPhone允许我输入#和*。当我检查keydown值时,它们分别与3和8相同(keycode 51和56)。这在Android浏览器中运行得很好,但在iPhone中却失败了 任何人都面临类似的问题 $(formSelector+'input[name^=“phone”]”)。打开('keydown keypress',函数(e){ //允许:退格、删除、制表

我正在进行电话验证,需要使用电话号码自动格式化输入,并且只允许添加数字字符。然而,当我尝试使用keydown和keypress限制输入时,IPhone允许我输入#和*。当我检查keydown值时,它们分别与3和8相同(keycode 51和56)。这在Android浏览器中运行得很好,但在iPhone中却失败了

任何人都面临类似的问题

$(formSelector+'input[name^=“phone”]”)。打开('keydown keypress',函数(e){
//允许:退格、删除、制表符、转义和回车
如果(e.keyCode==46 | e.keyCode==8 | e.keyCode==9 | e.keyCode==27 | e.keyCode==13 |
//允许:Ctrl+A
(e.keyCode==65&&e.ctrlKey==true)|
//允许:起始、结束、左、右
(e.keyCode>=35&&e.keyCode
首先,在iOS上触发两次(不知道为什么),而在FireFox上绑定失败,所以只需使用
$()键

你的过滤是让你想要的数字通过正确的键码,但是,没有捕捉到你需要捕捉的字符,起初我有一个解决方案,它使用e.orginialEvent.keyIdentifier来追踪那些不正常的键,但是这在firefox上失败了

在寻找这个问题的解决方案时,我发现并修改了这个问题的代码

$(formSelector)。按键(功能(e){
var k=e.keyCode | | e.charCode;
var c=e.charCode;
var isArrow=(c==0&&k>=37&&k=48&&k您可以执行以下操作:

并在您的列表中具有此功能:

函数筛选器(`obj,允许){
允许的风险值=拆分(“|”);

var c=0 对于(c;c oqj.value=obj.value.replace(允许[c],“”)
}
}
试试看


在事件中是否显示任何差异?jQUeryDemo显示相同的键码。3和#相同,8和*相同。但我在mobile和计算机浏览器中发现的一个区别是,在计算机中输入#和*时,shift键变为true,但在mobile中,这一点是错误的,因为我们没有使用任何shift键其他属性(例如,
shiftKey
)也一样?shiftKey在mobileIt中保持为false它会触发两次,因为按键时触发的三个事件中有两个正在被监听(keydown、keydup、keypress)。
  on('keydown keypress',function (e){});
  $(formSelector).keypress(function (e) {
     var k = e.keyCode || e.charCode;
     var c = e.charCode;
     var isArrow = (c == 0 && k >= 37 && k <= 40);
     var isSpecial = ((k == 8) || (k == 9) || (k == 127)) || isArrow;   // backspace, tab, delete
     var isOK = (k >= 48 && k <= 57) ;  // numbers
     return isOK || isSpecial;
   });