2013-03-30 7 views
6

私のHTMLページには、入力テキストフィールドがあります。キーボードの数字キーと左右矢印だけを入力したいと思っています。私は以下のJavaScriptを試しましたが、問題はありました。keyCodeの問題 - %文字の入力を防ぐことはできません

<input onkeypress="return allowNumberOnly(event)" /> 

function allowNumberOnly(event) { 
    event = event || window.event; 
    var charCode = (event.which) ? event.which : event.keyCode; 

    //keyCode 48-57 represent the number 0-9 
    //keyCode 37,39 represent the Left and Right arrow 
    //keyCode 46 represent the Delete key 
    //keyCode 8 represent the Backspace key 

    return charCode == 37 || charCode == 39 || charCode == 46 || charCode == 8 
       || (charCode >= 48 && charCode <= 57); 
} 

は、このコードをテストした後、私は、左矢印および%特殊文字のキーコードの両方37.あるので、私はその間に左矢印を許可するユーザー入力%文字を防ぐことができないという問題を発見しました。なぜこれが起こるのか分かりません。私はいつもkeyCodeはキーボードの各キーごとに一意でなければならないと考えました。私はonkeypressの代わりにonkeyupを使うことを考えました。しかし、onkeyupはユーザーが無効な文字を最初に入力してから、入力テキストを削除することができます。この動作は私が望むものではありません。どんな提案もありがとうございます。

FireFoxでコードをデバッグしたところ、次の違いが見つかりました。

1%を入力すると、event.which == 37とevent.keyCode == 0
2.左矢印、event.which == 0とevent.keyCodeの== 37

を入力した場合

この違いを利用することで問題は解決されたようです。 IEとChromeで引き続き試してみます。

+3

フィドルでそれを確認してください。 – JJJ

答えて

1

この質問へのブライアントウィリアムズの答えをチェック:

how can i track arrow keys in Chrome and IE?

を彼がいる場合charCodeは== 0をチェック、または押されているシフトキーをチェック示唆しています。

+0

@Nile event.shiftKey == falseを追加すると%文字が除外されますが、Shift + Leftの組み合わせキーも入力できなくなります。この組み合わせキーを使用して、入力テキストフィールドのコンテンツを選択したいと思います。 – kimi

1

私はこのa while ago思い付いた:基本的に私たちがここでやっていること、使用されるキーコードを取得し、その文字コードに相当するものに変換され、

<input type="text" name="phoneNumber" onkeypress="numbersOnly(event);"> 

var numbersOnly = function(e){ 
    var charCode = (typeof e.which === "number") ? e.which : e.keyCode, 
     chr = String.fromCharCode(charCode); //convert it to a character 

    if(isNaN(parseInt(chr, 10))) e.preventDefault(); 
} 

使い方キーコードの代わりにcharコードをテストします。私はこの方法が私が出会った他のどのものよりもはるかにうまく動作することを発見し、それはかなりうまく動作します。

JS Bin Example.

+0

OPも '' <' and '>キー( '%'とそれゆえの問題を)許可したい:

http://jsfiddle.net/UGpUJ/

+0

@JaredFarrishああ、クロムの矢印キーはFxでテストしてもうまくいきましたが、私はそうではないことが分かります。 – jeremy

+0

Firefoxは '<'と '%'を[.keyCode'と '.charCode'を反転させた](http://jsfiddle.net/userdude/mvJD5/1/)と見なしていると思われます。 Chromeは '<'プレスを無視するように見えます。 –

2

また、私はjQueryのバージョン

を作った:%の場合には、キーコードのチェックのために、このリンクは53

チェックです

$('input').keypress(function(e){ 

    var code = e.which || e.keyCode ; 

    if (!(e.shiftKey == false && 
      (
       code == 46 || 
       code == 8 || 
       code == 37 || 
       code == 39 || 
       (code >= 48 && code <= 57) 
      ) 
     ) 
    ){ 

     e.preventDefault();     
    } 

}); 
http://jsfiddle.net/gW6k3/
+0

私は、問題に関する一般的な情報への単一のリンクを投稿することは適切な答えだとは思わない。 –

+0

@CiananSims私はjQueryソリューションを作成しました。更新された回答を確認してください! – rab

+0

チャームのように働いてくれてありがとう! –

関連する問題