正在进行电话验证,并要求使用电话号码自动格式化输入,并且只允许添加数字字符。但是,当我尝试使用 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();   
        }              
});  
我还尝试了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, ''));  
   }  
});
有没有人有这个问题的通用解决方案?
先感谢您