Ano*_*ooj 5 javascript iphone events keycode
我正在进行电话验证,并要求使用电话号码自动格式化输入,并且只允许添加数字字符.但是当我尝试使用keydown和keypress限制输入时,IPhone允许我输入#和*.当我检查keydown值时,它们分别与3和8相同(键码51和56).这在Android浏览器中完美运行但在iPhone中失败.
任何人都面临类似的问
$(formSelector + ' input[name^="phone"]').on('keydown keypress',function (e) {
// Allow: backspace, delete, tab, escape, and enter
if ( e.keyCode == 46 || e.keyCode == 8 || e.keyCode == 9 || e.keyCode == 27 || e.keyCode == 13 ||
// Allow: Ctrl+A
(e.keyCode == 65 && e.ctrlKey === true) ||
// Allow: home, end, left, right
(e.keyCode >= 35 && e.keyCode <= 39)
) {
// let it happen, don't do anything
return;
} else {
// Ensure that it is a number and stop the keypress
if (e.shiftKey || (e.keyCode < 48 || e.keyCode > 57) && (e.keyCode < 96 || e.keyCode > 105 ) ) {
e.preventDefault();
}
});
Run Code Online (Sandbox Code Playgroud)
我还尝试了另一种方法,它在stackoverflow中建议使用'input propertychange'事件绑定输入,然后使用模式匹配.但这在IPhone中工作正常,但在Android中失败.
$(formSelector + ' input[name^="phone"]').bind('input propertychange', function() {
var text = $(this).val();
if (isNaN(text)) {
$(this).val(text.replace(/[^\d]/gi, ''));
}
});
Run Code Online (Sandbox Code Playgroud)
有没有人有这个问题的共同解决方案?
先感谢您
on('keydown keypress',function (e){});
Run Code Online (Sandbox Code Playgroud)
首先,在iOS上触发两次(不知道为什么),并bind在FireFox上失败,所以只需使用$().keypress.
你的过滤是通过正确的密码来获取你想要的数字,但是,没有捕获你需要捕获的字符,起初我有一个解决方案,使用e.orginialEvent.keyIdentifier来追踪行为不端的密钥,但这显然失败了在Firefox上.
在寻找该问题的解决方案时,我发现并修改了此页面中有关Firefox中密钥代码和字符代码的代码.
$(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;
});
Run Code Online (Sandbox Code Playgroud)
实时版本:
好的版本,经过测试:iOS,Chrome,Firefox,经过测试
| 归档时间: |
|
| 查看次数: |
2378 次 |
| 最近记录: |