0

私はこの質問から少しコードを借りました(回答4を参照):

jqueryで入力フィールドからの特殊文字をブロックまたは制限するにはどうすればよいですか?

ただし、コードを使用すると、入力時に検証は実行されますが、入力した内容を編集することはできないようです。

$('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;
}});

私は少し混乱しています。キープレスをキーアップに変更して調整しようとしましたが、これでは検証が機能しなくなります。どんなポインタでも丁寧に受け入れられます。

4

2 に答える 2

1

これはブラウザ固有の問題のようです。Firefoxでは、キープレスにはバックスペースや矢印キーなどのメタキーが含まれていますが、Chromeには含まれていません。ロジックを少し調整して、charCodeよりもどちらを優先するか(とにかくサポートされていると思います)、最終的にはこれになります

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

このフィドルは、入力時にイベントで渡されるキーとコードをコンソールに書き込みます。 http://jsfiddle.net/Q2MWS/5/

于 2012-05-30T16:25:57.600 に答える
0

event.preventDefault() は、正規表現と一致しない場合、入力された文字の編集を妨げていると思います。バックスペース、スペース、小数点キーなどの他の値については、event.which/event.charCode を確認してください。

于 2012-05-30T16:07:57.937 に答える