Javascript iPhone返回相同的按键事件(散列和3)和(星号和8)
我正在进行电话验证,需要使用电话号码自动格式化输入,并且只允许添加数字字符。然而,当我尝试使用keydown和keypress限制输入时,IPhone允许我输入#和*。当我检查keydown值时,它们分别与3和8相同(keycode 51和56)。这在Android浏览器中运行得很好,但在iPhone中却失败了 任何人都面临类似的问题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){ //允许:退格、删除、制表
$(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;
});