0

次のコードを使用して、テキスト フィールドへの入力を (英数字に) 制限したいと思います。

$('input').bind('keypress', function (event) {
    var regex = new RegExp("^[a-zA-Z0-9]+$");
    var key = String.fromCharCode(!event.charCode ? event.which : event.charCode);
    if (!regex.test(key)) {
       event.preventDefault();
       return false;
    }
});

上記のコードは標準入力フィールドではうまく機能しますが、Chosen によって生成されたフィールドに入力すると、関数が適用されません。選択したプラグインは div を生成しますが、それに触れて<input type="text">$('input')ないようです。これは、上記のコードが適用されるタイミングによるものだと思います..

4

2 に答える 2

1

ジャックの答えは機能します。しかし、理解しておくべき重要なことは、keypress イベントはバブリングするため、動的に生成されないノードで、ノード階層のどこでもキャッチできるということです。

http://jsfiddle.net/KWv7Z/6/

$(document).bind('keypress', function (event) {
    // Will fire for all elements, we only care for inputs
    // Also allow navigation keypresses
    if (event.target.tagName.toUpperCase() != "INPUT" ||
            $.inArray(event.which, [8,9,13,16,17,18,19,20,27,33,34,35,36,37,38,39,40,45,46]) ) {
      return;
    }
    var regex = new RegExp("^[a-zA-Z0-9]+$");
    // jQuery already normalizes event.which
    var key = String.fromCharCode(event.which);
    if (!regex.test(key)) {
       event.preventDefault();
       return false;
    }
});

これは、ページの入力ごとに個別のハンドラーをインストールしないため、メモリ フレンドリーでもあります。

于 2012-05-29T07:01:15.387 に答える