【问题标题】:Allow only numbers and colons in Safari and Chrome on iOS在 iOS 上的 Safari 和 Chrome 中只允许数字和冒号
【发布时间】:2012-12-19 20:33:06
【问题描述】:

我正在使用以下代码来防止某些字符被输入到文本框中。除了 iPad 和 iPhone 上的 Chrome 和 Safari(webkit 移动设备?)外,它运行良好。在 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;
        });
    });

【问题讨论】:

    标签: jquery ios webkit onkeyup mobile-webkit


    【解决方案1】:

    我们使用类似的逻辑(keyCode 48-75 和 96-105)并且它有效。我没有测试您的示例代码,但是您的第一个 if 语句大量使用了 &amp;&amp; 和 || 而没有括号让我有点担心。也许尝试放入一些括号组,然后再试一次?

    【讨论】:

    • 我发现这是因为在 iPad 或 iPhone 上,您不必按 Shift 键来访问冒号。但是,如果我在不需要 Shift 的情况下允许使用 186 键,它也允许用户输入分号,这是我想要阻止的。
    • 不是最干净的解决方案,但您可以添加针对 iphone / ipad 的用户代理的测试。喜欢:e.shiftKey || (/(iPhone|iPod|iPad)/i.test(navigator.userAgent))
    • 是的,这就是我最终所做的。
    【解决方案2】:

    这就是我最终所做的 - 检测 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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-27
      • 1970-01-01
      • 2014-04-11
      相关资源
      最近更新 更多