問題:
これが私のコードの出発点です...
var keyCode = (e.keyCode ? e.keyCode : e.which);
ただし、keyCodeで取得するすべての値は、Webで見た文字グラフのanyに対応していません。たとえば、文字「h」は104のリターンコードを提供します。
KeyCodeはCharCodeと異なりますか?どのコードに制御文字が含まれていますか?変換する必要がありますか?
入力をa-z A-Zに制限し、JavaScriptで必要なキーを許可するにはどうすればよいですか?
すべての質問に対する答えは 次のページ にあります。
...しかし要約すると:
keypress
イベントです。keypress
イベントでは、IE <= 8を除くすべてのブラウザーは、イベントのwhich
プロパティに文字コードを保存します。 charCode
プロパティの文字コード。keypress
イベントでは、IE <= 8はkeyCode
プロパティに文字コードを保存します。これは、キー押下に対応する文字コードを取得することを意味します。キー押下イベントオブジェクトがe
と呼ばれる変数に格納されていると仮定すると、以下はどこでも動作します。
var charCode = (typeof e.which == "number") ? e.which : e.keyCode
通常、これは、存在する場合は文字コードを返し、そうでない場合は0を返します。すべきでないときにゼロ以外の値を取得する場合がいくつかあります。
最初の問題の回避策は少し複雑で、keydown
イベントも使用する必要があります。
やれやれだぜ。 KeyboardEvent。[key、char、keyCode、charCode、which]はすべて非推奨であるか、MozillaのAPIドキュメントによると現在未解決のバグがあります- https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent 。 JQueryでさえ、これに負けて、ユーザーがそれを把握できるようにします https://api.jquery.com/keydown/ 。
実際、104はASCII小文字 'h'のコードです。keypressで入力された文字のASCIIコードを取得するには、e.which || e.keyCode
、およびキー入力を心配する必要はありません。入力されたテキストに対して、keypressはすべてのブラウザで自動的に繰り返されます(優れた http://unixpapa.com/js/key.htmlによると )。
だからあなたが本当に必要なのは:
<input id="textbox">
<script type="text/javascript">
document.getElementById('textbox').onkeypress = function(e){
var c = e.which || e.keyCode;
if((c > 31 && c < 65) || (c > 90 && c < 97) || (c > 122 && c !== 127))
return false;
};
</script>
それを試してください: http://jsfiddle.net/wcDCJ/1/
(ASCIIコードは http://en.wikipedia.org/wiki/Ascii からのものです)
onKeyPressには、大文字と小文字の異なるコードがあります。おそらく、キャップロックをオンにしてから文字を入力すると、期待するコードが得られることがわかるでしょう
onKeyUpとonKeyDownの大文字と小文字の文字コードは同じです。 onKeyPressに最も近いため、onKeyUpを使用することをお勧めします。
/ *非印刷キーのkeypressでkeyCodeを取得しません。代わりにkeydownでキーコードをキャプチャしませんか? * /
function passkeycode(e){
e= e || window.event;
var xtrakeys={
k8: 'Backspace', k9: 'Tab', k13: 'Enter', k16: 'Shift', k20: 'Caps Lock',
k35: 'End', k36: 'Home', k37: 'Ar Left', k38: 'Ar Up', k39: 'Ar Right',
k40: 'Ar Down', k45: 'Insert', k46: 'Delete'
},
kc= e.keyCode;
if((kc> 64 && kc<91) || xtrakeys['k'+kc]) return true;
else return false;
}
inputelement.onkeydown=passkeycode;
kc> 64 && kc <91 // a-zA-Z
xtrakeys ['k' + integer])は、許可される特別なキーコードを定義します
マークアップの例を次に示します。
<form id="formID">
<input type="text" id="filteredInput">
<input type="text" id="anotherInput">
</form>
次のロジックを使用して、キーボード入力をトラップできます(この場合、jQueryドキュメント対応ラッパーを介して)。
それは少し間抜けに見えるかもしれませんが、基本的に、私は許可したいすべてのものをチェックします(あなたの場合、大文字小文字を区別しないAからZの文字)と何もしない。つまり、デフォルトのアクションは許可されますが、アルファ以外の入力は禁止されます。
矢印キー、ホーム、エンド、タブ、バックスペース、削除などの標準キーボードナビゲーションがチェックされ、許可されます。
注:このコードは元々、英数字値(A-Z、a-z、0-9)のみを許可するユーザー入力を満たすために書かれたものであり、これらの行はコメントとしてそのまま残しました。
<script>
jQuery( document ).ready( function() {
// keydown is used to filter input
jQuery( "#formID input" ).keydown( function( e ) {
var _key = e.which
, _keyCode = e.keyCode
, _shifted = e.shiftKey
, _altKey = e.altKey
, _controlKey = e.ctrlKey
;
//console.log( _key + ' ' + _keyCode + ' ' + _shifted + ' ' + _altKey + ' ' + _controlKey );
if( this.id === jQuery( '#filteredInput' ).prop( 'id' ) ) {
if(
// BACK, TAB
( _key === 8 || _key === 9 ) // normal keyboard nav
){}
else if(
// END, HOME, LEFT, UP, RIGHT, DOWN
( _key === 35 || _key === 36 || _key === 37 || _key === 38 || _key === 39 || _key === 40 ) // normal keyboard nav
){}
else if(
// DELETE
( _key === 46 ) // normal keyboard nav
){}
else if(
( _key >= 65 && _key <= 90 ) // a- z
//( _key >= 48 && _key <= 57 && _shifted !== true ) || // 0 - 9 (unshifted)
//( _key >= 65 && _key <= 90 ) || // a- z
//( _key >= 96 && _key <= 105 ) // number pad 0- 9
){}
else {
e.preventDefault();
}
}
});
});
</script>