0

やあ、私はこの JSFiddleを立ち上げたので、説明するのが少し難しいので、私が話していることを知っているでしょう。この JS は、単純な正規表現を使用し/[1-9][0-9]{3}/て 5 桁の数字 10000 ~ 99999 を検出しています。これは正常に機能し、この範囲に 5 桁を入力すると、色が緑に変わります。それ以外の場合、色は赤のままです。問題は、5 桁に達した後に文字を「削除」すると、色が本来の赤に戻らず、残りの 2 文字まで緑のままになることです。これを修正しようとしていますが、なぜこれが起こっているのかわかりませんか? 助けていただければ幸いです。

これがこのための Jquery です。

<script>
    $(document).ready(function ()
    {
        $('#invoice').keydown(function()
        {
            var regex = /[1-9][0-9]{3}/;
            if (regex.test($('#invoice').val()))
            {
                $('#invoice').css({'color': '#0f0'}).addClass('valid-short');
                $('#path').val('check');
            } else {
                $('#invoice').css({'color': '#f00'}).removeClass();
                $('#path').val('update');
            }
        });
    });
</script>

<ul>
    <li>
        <label for='invoice'>Invoice</label>
        <input type='text' name='invoice' id='invoice' autofocus='autofocus' />
        <input type='hidden' name='path' id='path'autofocus='autofocus' required='required' />
    </li>
</ul>
4

5 に答える 5

2

代わりに次のコードを使用してください。

   $(document).ready(function ()
        {
            $('#invoice').keyup(function()
            {
                var regex = /^[1-9][0-9]{4}$/;
                if (regex.test($('#invoice').val()))
                {
                    $('#invoice').css({'color': '#000'}).addClass('valid-short');
                    $('#path').val('check');
                } else {
                    $('#invoice').css({'color': '#f00'}).removeClass();
                    $('#path').val('update');
                }
            });
        });

変更点:

  1. バグを修正するために、keydown の代わりに keyup を使用します。
  2. 実際に正しい正規表現を使用します。元の正規表現(およびいくつかの回答)では、いくつかのバグのある数値が許可されています。
于 2013-07-14T20:46:15.427 に答える
1

あなたの問題は$.val()、入力の値をチェックするために使用していることです。しかし、入力の値はkeyupイベントの後まで設定されません。

keyup代わりに: event を使用してくださいkeydown

それに加えて、正規表現は問題ありません:

  • 5 文字から始まる有効な式
  • 式を 0 で開始することはできません
于 2013-07-14T20:48:00.880 に答える
0

正規表現は明らかに 5 桁ではなく 4 桁に一致します!

私はJQueryを知りませんが、キーダウンイベントが発生した後にテキストフィールドの値が変わることは確かです

そのため、5 桁目を入力すると正しく一致し、桁を削除するとおかしな動作をします。

よろしく、

アクダ

于 2013-07-14T20:47:10.563 に答える