1

次のコードを使用して、特定の文字がテキスト ボックスに入力されないようにしています。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;
        });
    });
4

2 に答える 2

1

同様のロジック (keyCode 48-75 および 96-105) を使用し、機能します。私はあなたのサンプルコードをテストしていませんが、括弧なしifで多用している最初のステートメントは&&少し||心配です. いくつかの括弧グループを入れてみて、もう一度試してみませんか?

于 2012-12-19T20:46:04.750 に答える
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;
于 2012-12-20T00:50:47.670 に答える