3

長さが0の場合、ユーザーがaz AZ 0-9以外を入力できないようにするこのコードがあります。特殊文字の入力が許可されていないことをユーザーに警告したいと思います。問題は、スペースを押すと、アラートが表示されて一瞬のうちに消えてしまうことです。コードの何が問題になっていますか?

    $('#value').bind('keypress', function(e) {
        if($('#value').val().length == 0){
            if (e.which == 32){//space bar
                e.preventDefault();
            }
            if (e.which < 48 || 
                    (e.which > 57 && e.which < 65) || 
                    (e.which > 90 && e.which < 97) ||
                    e.which > 122) {
                    e.preventDefault();
                        alert("Not allowed");
            }
        }
    });   

    <input type="text" id="value" />

デモはこちら

4

3 に答える 3

0

いくつかのアドバイス:

  1. bind メソッドの代わりに on メソッドを使用する
  2. メソッドコールバックにいるときは、「this」キーワードで要素を参照できます

ここでのアドバイスに加えて、コードとフィドルがあります。

$('#value').on('keypress', function(e) {
            if($(this).val().length == 0){
                if (e.which == 32){//space bar
                    e.preventDefault();
                    alert("just some text");
                }
                var valid = (e.which >= 48 && e.which <= 57) || (e.which >= 65 && e.which <= 90) || (e.which >= 97 && e.which <= 122);
if (!valid) {
    e.preventDefault();
}
            }
        }); 

http://jsfiddle.net/fwcfq/45/

于 2013-09-04T09:28:42.670 に答える