3

(別のStackoverflowの質問から)のようないくつかの非常に基本的なコードを使用する

<HTML>
  <HEAD>
    <SCRIPT language=Javascript>
       <!--
       function isNumberKey(evt)
       {
          var charCode = (evt.which) ? evt.which : event.keyCode;
          if (charCode != 46 && charCode > 31 
            && (charCode < 48 || charCode > 57))
             return false;

          return true;
       }
       //-->
    </SCRIPT>
  </HEAD>
  <BODY>
    <INPUT id="txtChar" onkeypress="return isNumberKey(event)" 
           type="text" name="txtChar">
  </BODY>
</HTML>

このコードは、数値を入力するだけでうまく機能することがわかりました。ただし、Firefox、Safari、Opera (OSX 10.8.3 を実行しているため IE をテストできません) では機能的にコピー/貼り付け/選択をすべてブロックするようですが、Chrome ではブロックしません。理由が分からないようです。何か案は?

Jquery AlphaNum ライブラリも試しました

https://github.com/KevinSheedy/jquery.alphanum

しかし、それも同じ動作を示します。

4

4 に答える 4

2

コンテキスト メニューから選択すると (つまり、テキスト ボックスを右クリックして適切なコマンドを選択する)、切り取り、コピー、貼り付け、および選択のすべてのコマンドが機能します。

ただし、Ctrl+X、Ctrl+C、Ctrl+V、および Ctrl+A が機能しない理由は、それらが関数によってブロックされるキー イベントでもあるためです。数字ではないキーを押すと、関数は を返しますfalse

次のコード (投稿から) は入力をブロックします。

if (charCode != 46 && charCode > 31 
        && (charCode < 48 || charCode > 57))
        return false;

キーボード ショートカット (Ctrl+X/C/V/A) には、これらの範囲にない文字コードがあります。プロパティを使用して、これらのコマンドをホワイトリストに登録する必要がありevt.ctrlKeyます。

于 2013-03-17T08:32:23.987 に答える
1

コピーペーストを許可するには:

function isNumberKey(evt)
   {
      var charCode = (evt.which) ? evt.which : event.keyCode;
      if (charCode != 46 && charCode > 31 
        && (charCode < 48 || charCode > 57)) && !evt.ctrlKey  //ctrlKey returns boolean weather ctrl is pressed or not.
         return false;

      return true;
   }
于 2013-03-17T08:40:43.327 に答える
0

この機能を試してください:

function isNumber(e) {
        e = e || event;
        return +(String.fromCharCode(e.charCode || e.keyCode)) 
                || !e.charCode && e.keyCode < 48;
}

Jsフィドル

于 2013-03-17T08:39:59.140 に答える
0

e.metaKeyMacOS 版 Firefox では、キーに対応する属性も確認する必要がありcmdます。

これはjquery.alphanum V1.0.9で修正され、説明した問題はIssue #9として記録されます。

于 2013-05-14T16:05:26.127 に答える