web-dev-qa-db-ja.com

JavaScriptキーコード46はDELファンクションキーまたは(。)ピリオド記号ですか?

Jqueryを使用してJavaScriptでロジックを記述しています。ここで、入力コンテンツをREGEXパターンと照合する必要があります。例:

"^[a-zA-Z0-9_]*$"  //Alpha-numeric and _

ロジックはほぼ完了しています。ファンクションキーDELのフィルタリングに少し問題があります。ロジックは、次のようになります。

var FunctionsKey = new Array(8, 9, 13, 16, 35, 36, 37, 39, 46);

function keypressValidation(key) {
            if (config.regexExp != null) {
                if ($.inArray(key, FunctionsKey) != -1) {
                    return true;
                }
                else {
                    var keyChar = String.fromCharCode(key);
                    return RegexCheck(keyChar);
                }
            }
            return true;
        }

KeyCodeが配列内の1つである場合は通過させ、そうでない場合はcharを取得してREGEXと比較します。問題は次のとおりです。一部のブラウザでは、DELと「。」 (ピリオド記号)は同じキーコード46を持っています。

したがって、ファンクションキーをフィルタリングするためのより良いロジックがありますか、またはその場合の条件を記述する必要があります。配列から46を削除して、charに変換しようとします。そうでない場合は、正規表現関数に移動します。通過させますか?他の質問は、いくつかのブラウザでより多くの共有キーコードがあるかどうかです。

編集:ユーザーがどのキーを押したか(DELまたはピリオド)は関係ないため、提案されたソリューションは機能しません。少なくともOPERAおよびFF =(。

12
JOBG

110は10進キーコード、46はDELキーです。

楽しみのために:これを入れて、何を打ったかを確認してください!編集:焦点を絞ったイベントを追加しました

   /* handle special key press */
$(document).ready(function() {
  function checkAKey(e) {
    var shouldBubble = true;
    switch (e.keyCode) {
      // user pressed the Tab 
      case 9:
        {
          alert("Tab hit, no bubble");
          shouldBubble = false;
          break;
        };
        // user pressed the Enter    
      case 13:
        {
          alert("Enter");
          break;
        };
        // user pressed the ESC
      case 27:
        {
          alert("Escape");
          break;
        };
    };
    /* this propogates the jQuery event if true */
    return shouldBubble;
  };

  $("*").keydown(function(e) {
    return checkAKey(e);

  });
});

OR

$(document).ready(function() {
  /* handle special key press */
  function checkFieldKey(e, me) {
    var shouldBubble = true;
    switch (e.keyCode) {
      // user pressed the Enter
      case 13:
        {
          $(me).blur();
          $("#somewhereElse").focus();
          shouldBubble = false;
          break;
        };
    };
    /* this propogates the jQuery event if true */
    return shouldBubble;
  };
  /* user pressed special keys while in Selector */
  $("#myField").keydown(function(e) {
    return checkFieldKey(e, $(this));
  });
});
10

キーパッドの10進数またはドットキーコードは190です。テンキーの10進数は110です。

乾杯..!!

6
Bhaumik

@ Mark Schultheiss '答えは本当に良いです、私はそれにもう少し追加します:あなたがプッシュする必要があるとき DEL 入力要素の外側にあるキーボードのボタン(つまり、テキストフィールドがフォーカスを失ったとき)は、それをインターセプトする必要があります。これは次のように行うことができます。

$("#selector-for-a-textbox, body").keydown(function(event){
  if(event.keyCode==46){
     // do something here
  }
});
3
vcoppolecchia

違いは次のとおりです。キーを押すと、「DELETE」キーと「。」が表示されます。 keyはキーコード46を返します。

したがって、キーアップまたはキーダウンでコードを記述してから、「DELETE」キーが適切に機能します。

チェックするには http://javascript.info/tutorial/keyboard-events

不正なコード

 window.addEventListener("keypress", dealWithKeyboard, false);

正しいコード:

window.addEventListener("keydown", dealWithKeyboard, false);

最終コード

 window.addEventListener("keydown", dealWithKeyboard, false);
 function dealWithKeyboard(e) {   // CHECK KEYPRESS EVENT
         if(e.keyCode ==46){
           delete_object();} 
      }

それは私にとってうまく機能しています。

3
muTheTechie

小数の前にn桁、小数の後にn桁が必要な場合は、単純に、を使用できます。

_var validate = function(e) {
var beforedecimal=5;
var afterDecimal=4;
  var t = e.value;
  var n = t.includes(".");
  if(n== true){
    e.maxLength = 15;
  e.value = (t.indexOf(".") >= 0) ? (t.substr(0, t.indexOf(".")) + t.substr(t.indexOf("."), afterDecimal)) : t;
}else if(n == false){
    var a=t.length;
    e.maxLength = beforedecimal;
    if(a>=beforedecimal){
        if(event.keyCode == 46){
            e.maxLength = beforedecimal+1;
        }
    }
    
}

}_
<input type="text" id="resultText" onkeypress="validate(this)" />
0
deepeshb