我使用以下代码来阻止某些字符输入文本框。它适用于iPad和iPhone上的Chrome和Safari(webkit mobile?)。适用于Safari和Chrome中的Mac。任何想法如何限制这些设备的数字和冒号?
jQuery.fn.forceNumeric = function (allowDecimal, allowColon)
{
return this.each(function ()
{
$(this).keydown(function (e)
{
var key = e.which || e.keyCode;
if (!e.shiftKey && !e.altKey && !e.ctrlKey &&
// numbers
key >= 48 && key <= 57 ||
// Numeric keypad
key >= 96 && key <= 105 ||
// period, comma, minus adn period on keypad
// key == 190 || // period
// key == 188 || // comma
// key == 109 || // minus
// key == 110 || // period on keypad
// Backspace and Tab and Enter
key == 8 || key == 9 || key == 13 ||
// Home and End
key == 35 || key == 36 ||
// left and right arrows
key == 37 || key == 39 ||
// Del and Ins
key == 46 || key == 45)
return true;
else if (!e.shiftKey && !e.altKey && !e.ctrlKey && allowDecimal && key == 190) // period
return true;
else if (!e.shiftKey && !e.altKey && !e.ctrlKey && allowDecimal && key == 110) // period on keypad
return true;
else if (e.shiftKey && (key == 186 || key == 59) && allowColon) // colon (ie & chrome = 186, ff = 59)
return true;
else
return false;
});
});
答案 0 :(得分:1)
我们使用类似的逻辑(keyCode 48-75和96-105),它的工作原理。我没有测试过您的示例代码,但是您的第一个if
语句大量使用了&&
和||
而没有括号,这让我有点担忧。也许试着加入一些括号内的小组并再试一次?
答案 1 :(得分:0)
这是我最终做的 - 检测iOS设备并在原始脚本中添加else。可能有更好的方式...
function isiPhone(){
return (
//Detect iPhone
(navigator.platform.indexOf("iPhone") != -1) ||
//Detect iPod
(navigator.platform.indexOf("iPod") != -1)
);
}
var isiPad = navigator.userAgent.match(/iPad/i) != null;
...
else if ((isiPhone() || isiPad) && (key == 186 || key == 59) && allowColon) // colon (iOS devices don't have a shift key)
return true;