18

最大長を検出する機能があります。ただし、問題は、最大長がCtrl+Aの組み合わせに達したときに機能しないことです。JavaScriptを使用してCtrl+Aの組み合わせを検出するにはどうすればよいですか。

これは私のmaxlengthコードです。

if (event.keyCode==8 || event.keyCode==9 || event.keyCode==37 || event.keyCode==39 ){
        return true;
} else {            
        if((t.length)>=50) {    
            return false;
        }   
}
4

5 に答える 5

32

チェックevent.ctrlKey

function keyHandler(event) {
    event = event || window.event;
    if(event.keyCode==65 && event.ctrlKey) {
        // ctrl+a was typed.
    }
}
于 2012-11-24T09:11:10.807 に答える
2

キーコード:

shift   16
ctrl    17
alt     18

あなたのjQuery:

$(document).keydown(function (e) {
    if (e.keyCode == 18) {
        alert("ALT was pressed");
    }
});

JavaScriptマッドネス:キーボードイベント

于 2012-11-24T08:56:00.387 に答える
1

以下を使用できます。

document.onkeypress = function(evt) {
  evt = evt || window.event;
  etv = evt;
  switch (etv.keyCode) {
    case 16:
      // Code to do when Shift presed
      console.log('Pressed [SHIFT]');
      break;
    case 17:
      // Code to do when CTRL presed
      console.log('Pressed [CTRL]');
      break;
    case 32:
      // Code to do when ALT presed
      console.log('Pressed [ALT]');
      break;
  }
};

于 2012-11-24T10:44:40.037 に答える
0

私もこれに対する解決策が必要だったので、うまくいくものをいくつか見つけ、コードを大幅に減らすためにクリーンアップし、ES6... JSFiddleリンク

function isCapsLock(event=window.event) {
  const code = event.charCode || event.keyCode;

  if (code > 64 && code < 91 && !event.shiftKey) {
    return true;
  }

  return false;
}

document.getElementById("text").addEventListener("keypress", event => {
  const status = document.getElementById("status");
  if (isCapsLock(event)) {
    status.innerHTML = "CapsLocks enabled";
    status.style.color = "red";
  } else {
    status.innerHTML = "CapsLocks disabled";
    status.style.color = "blue";
  }
}, false);
<input type="text" id="text" /><br>
<span id="status"></span>

于 2018-02-22T18:47:52.217 に答える
0

これは非常に古い質問です。gilly3の答えは、KeyboardEventタイプのイベントオブジェクトが関数の引数として渡されている場合にのみ有効です。この関数のように使用可能なイベントオブジェクトがない場合、現在のコントロールキーの状態を検出するにはどうすればよいですか?

function testModifierKey() {
  // have I some modifier key hold down at this running time?
}

私はspikebrehmのhttps://gist.github.com/spikebrehm/3747378から長い検索の後に解決策を見つけました。彼の解決策は、グローバル変数でjQueryを使用して、いつでも修飾キーの状態をトレースすることです。

グローバル変数window.modifierKeyは、イベントオブジェクトを必要とせずに、どのような状況でも使用できます。

function testModifierKey() {
  // have I have some modifier key hold down at this executing time?
  if(window.modifierKey) {
    console.log("Some modifier key among shift, ctrl, alt key is currently down.");
    // do something at this condition... for example, delete item without confirmation.
  } else {
    console.log("No modifier key is currently down.");
    // do something at other condition... for example, delete this item from shopping cart with confirmation.
  }
}

HTMLドキュメントにロードする彼のスクリプトは次のとおりです。

// source: https://gist.github.com/spikebrehm/3747378
// modifierKey used to check if cmd+click, shift+click, etc. 
!function($, global){
  var $doc = $(document);
  var keys;

  global.modifierKey = false;

   global.keys = keys = {
      'UP': 38,
      'DOWN': 40,
      'LEFT': 37,
      'RIGHT': 39,
      'RETURN': 13,
      'ESCAPE': 27,
      'BACKSPACE': 8,
      'SPACE': 32
  };

  // borrowed from Galleria.js
  var keyboard = {
    map: {},
    bound: false,

    press: function(e) {
      var key = e.keyCode || e.which;
      if ( key in keyboard.map && typeof keyboard.map[key] === 'function' ) {
        keyboard.map[key].call(self, e);
      }
    },

    attach: function(map){
      var key, up;

      for(key in map) {
        if (map.hasOwnProperty(key)) {
          up = key.toUpperCase();
          if (up in keyboard.keys) {
            keyboard.map[keyboard.keys[up]] = map[key];
          } else {
            keyboard.map[up] = map[key];
          }
        }
      }
      if (!keyboard.bound) {
        keyboard.bound = true;
        $doc.bind('keydown', keyboard.press);
      }
    },

    detach: function() {
      keyboard.bound = false;
      keyboard.map = {};
      $doc.unbind('keydown', keyboard.press);
    }
  };

  $doc.keydown(function(e) {
    var key = e.keyCode || e.which;
    if (key === 16 || key === 91 || key === 18 || key === 17) {
      modifierKey = true;
    } else {
      modifierKey = false;
    }
  });

  $doc.keyup(function(e) {
    modifierKey = false;
  });
}(jQuery, window);
于 2020-03-15T16:26:28.183 に答える