1

価格フィールドがあり、数字だけを受け入れたい (input[number] などのデフォルトの html5 入力は好きではない) だから私はこれを書いた:

<input type="text" name="price" placeholder="" onkeypress="validate(event)">

function validate(evt) {
    var theEvent = evt || window.event;
    var key = theEvent.keyCode || theEvent.which;
    key = String.fromCharCode( key );
    var code = theEvent.keyCode || theEvent.which;
    var regex = /[0-9]/;
        if( !regex.test(key) && code != 8/*backspace*/ && code != 37/*left*/ && code != 39/*right*/ && code != 13/*enter*/ && code != 46/*delet*/ && code != 9/*tab*/){
        theEvent.returnValue = false;
        if(theEvent.preventDefault) theEvent.preventDefault();
        };
};

左矢印キーや右矢印キー、タブなどのいくつかの文字が表示されるように、ナビゲーションを改善するために追加されています。Chromeで完璧に動作します。Firefox では、一部の文字が意図せず追加されます。たとえば、左矢印キーと % のキー コードは同じです。これで、価格フィールドが Firefox で % を受け入れるようになりました! 同じ問題を抱えた単純な正規表現コードも見つけました。どうすればFirefoxに理解させることができますか?!

4

1 に答える 1

4

実際にはkeyCodeと の%left arrow key 同じではありません。

  • %
    • .charCode == 37
    • .keyCode == 0
    • .which == 37
  • left arrow
    • .charCode == 0
    • .keyCode == 37
    • .which == 0

プログラム ロジックを修正する必要があります... = theEvent.keyCode || theEvent.which

(Raw) ブラウザが正しく完全に実装.key.char開始するまで、キーボードの処理は混乱しています。

于 2013-10-22T08:18:00.200 に答える