1

10進数の検証に次の関数を使用します

    $('.decimalValidate').live('keypress', function (e) {
        var decimalid = $(this).attr("id");
        var decimalval = $('#' + decimalid).val();

        var decimalvalidate = ApplyDecimalFilter(decimalval, e);
        if (decimalvalidate == false) return false;
    });



    function ApplyDecimalFilter(id, event)
        {
            try {
                return NewDecimalFilter(id, event);
            } catch (e) {
                alert(e.message);
            }
        }

    function NewDecimalFilter(o, event) {
            if (event.which > 47 && event.which < 58) {
                return true;
            }
            if (event.which == 50 ||(event.which == 8 || event.which == 46) && o.indexOf('.') == -1)  {
                return true;
            }
            return false;
        }

この if 条件は FireFox でのみ機能しません。これは、1 つのドット記号のみを入力するために使用されます。

if (event.which == 50 ||(event.which == 8 || event.which == 46) && o.indexOf('.') == -1)  {
                return true;
            }
4

2 に答える 2

2

一般に、このタイプの検証は注意して行う必要があります。これは、キーボード以外の手段 (貼り付け、テキストのドラッグ、コンテキスト メニューの [削除] オプションなど) を介してテキストが入力に変更される可能性があるためです。キーボード入力を制限するには、フォームを送信するときに適切な検証を行う必要があります。

keyCode押された実際のキー (通常はkeydownまたはkeyupではなくkeypress)whichを検出し、入力された文字を検出する (keypressイベントでのみ)ために使用します。keyCode一般に、イベントのプロパティを見るのは良い考えではありませんkeypressが、delete と backspace の場合は問題ありません。すべてのブラウザーkeypressがこれらのキーに対してイベントを発生させるわけではありませんが、イベントを発生させるものでは、keyCodeプロパティは一貫しています。

要約すると、に変更(event.which == 8 || event.which == 46)(event.keyCode == 8 || event.keyCode == 46)、残りは同じままにします。

私が見た JavaScript の主要なイベントの最良のリファレンスは次のとおりです: http://unixpapa.com/js/key.html

于 2012-06-29T08:28:06.013 に答える