2011-10-14 10 views
5

とは何ですか? JavaScriptまたはjQueryでコントロールキーをフィルタリングします。 コントロールキーは、A〜Z、0〜9、または特殊文字(つまり、@、#など)でないキーを意味します。私は単に 'Shift'、 'Alt'、F1-F9、Caps Lockなどのキーを除外したいだけです。jQuery/Javascript - keyDownイベントの「コントロール」キーを拒否する

私は個々のASCIIコードをイベント引数から確認することができます。 「よりクリーンな」ソリューションがあるのだろうかと疑問に思います。

注:私は

答えて

5

私はこのようなものと一緒に行きました:この契約はドイツのumlatsなどのUnicode文字をどのよう

function (e, inputElement) { 
    // If the user gives the textbox any keyboard input, mark the input box as "dirty" 
    var scope = this; 
    var k = e.which; 

    // Verify that the key entered is not a special key 
    if (k == 20 /* Caps lock */ 
    || k == 16 /* Shift */ 
    || k == 9 /* Tab */ 
    || k == 27 /* Escape Key */ 
    || k == 17 /* Control Key */ 
    || k == 91 /* Windows Command Key */ 
    || k == 19 /* Pause Break */ 
    || k == 18 /* Alt Key */ 
    || k == 93 /* Right Click Point Key */ 
    || (k >= 35 && k <= 40) /* Home, End, Arrow Keys */ 
    || k == 45 /* Insert Key */ 
    || (k >= 33 && k <= 34) /*Page Down, Page Up */ 
    || (k >= 112 && k <= 123) /* F1 - F12 */ 
    || (k >= 144 && k <= 145)) { /* Num Lock, Scroll Lock */ 
     return false; 
    } 
    else { 
     scope.setPointValueDirtyStatus(inputElement, true); 
    } 
} 
+0

はい。ブルートフォースが必要だと思われる:( – Zeek

+0

BTW「右クリックポイントキー」とは何ですか? – Zeek

3

IE 8のために特別にアプリケーションを開発しています使用event.which - 各キーには、独自のコードを持っています。コントロールキーは17、シフトキーは16、@は2つの異なるキー、16に続いて50です。そのページのデモを使用して、受け入れるか無視する各キーに対して返される値を調べます。

1

これにより、a-z(コード65〜90)、0〜9(48〜57)のみが許可されます。 shiftは、テキストを大文字に変換するために必要であるため、許可する必要があります。

$("...").keydown(function(ev){ 
    var k = ev.which; 
    if(!(k >= 65 && k <= 90) /* a-z */ 
    || !(k >= 48 && k <= 57) /* numbers */ 
    || !(k >= 96 && k <= 111) /* numeric keyboard*/ 
    || k != 59 || k != 61 || k != 188 || k != 190 || k != 191 || k != 191 
    || k != 192 || !(k >= 219 && k <= 222) || k != 32 /* Comma's, etc. */ 
    || ev.ctrlKey || ev.altKey/* || ev.shiftKey*/){ 
     //Filter 
    } 
}) 
+0

?首都? – Zeek

関連する問題