iPhone为(hash和3)和(Asterisk和8)返回相同的keydown事件
iPhone returning same keydown event for (hash and 3) and (Asterisk and 8)
我正在进行电话验证,并要求使用电话号码自动格式化输入,并且只允许添加数字字符。然而,当我尝试使用keydown和keypress限制输入时,IPhone允许我输入#和*。当我检查keydown值时,它们分别与3和8相同(键代码51和56)。这在安卓浏览器中非常有效,但在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();
}
});
我还尝试了stackoverflow中建议的另一种方法,将输入与"inputpropertychange"事件绑定,然后使用模式匹配。但这在IPhone中是正确的,但在Android中失败了。
$(formSelector + ' input[name^="phone"]').bind('input propertychange', function() {
var text = $(this).val();
if (isNaN(text)) {
$(this).val(text.replace(/[^'d]/gi, ''));
}
});
有人能解决这个问题吗??
提前感谢
on('keydown keypress',function (e){});
首先,在iOS上触发两次(不知道为什么),在FireFox上bind
失败,所以只使用$().keypress
。
你的过滤是为你想要的数字提供正确的键代码,但没有捕捉到你需要捕捉的字符,起初我有一个解决方案,使用e.orginialEvent.keyIdentifier来追踪错误的键,但这在firefox上失败了。
在寻找这个问题的解决方案时,我在这个页面上找到并修改了Firefox中关于密钥码和charcode的代码。
$(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;
});
实时版本:
好版本,测试在:iOS,Chrome,Firefox,测试
keyIdentifier版本,失败于:Firefox
尝试
<input type="number">
或
<input pattern="[0-9]">
您可以执行以下操作:<input oninput="filter(this,'1|2|3|4|5|6|7|8|9|0')">
并且在您的列表中具有此功能:
function filter(`obj,allowed) {
var allowed = split("|");
var c = 0
for(c; c < allowed.length; c++)
{
oqj.value=obj.value.replace(allowed[c],"")
}
}
- 节点导出返回一个空对象
- ES6构造函数返回基类的实例
- 监视函数从服务返回不起作用,但作用域函数起作用
- 控制台返回var不是't定义,但它是
- 从函数返回角度承诺
- Javascript返回值只在循环中返回一次
- 从控制器返回后Ajax启动事件激发
- CKFinder 3为所选文件返回错误的URL
- 如何在d3.js中返回路径的y坐标
- 如何从jquery函数返回变量
- Angular js-返回一个包含类似
- JSONP请求返回结果,但也触发error_callback
- 如何使用Spring MVC将Facebook返回的响应数据保存在Java类中
- 使用特定键在keydown时触发事件
- 从HTTPGET返回一个自定义对象列表,以便在Angular 2应用程序中使用
- JS验证ajax返回的html中的表单数据
- 使用谷歌应用程序脚本将服务器端数据表返回到客户端
- AJAX:$_GET不返回任何值
- iPhone为(hash和3)和(Asterisk和8)返回相同的keydown事件
- Keydown键码没有返回预期的结果