【问题标题】:Detecting left and right control keys in Javascript检测Javascript中的左右控制键
【发布时间】:2020-04-02 02:47:38
【问题描述】:

我有一个文本输入,我需要在执行 CTRL-V 时绑定一个事件。我设置了一个名为ctrl 的全局变量,每当keydownwhich 值为17 触发时,该变量设置为1。同样,当keyupwhich 值为17 触发时,它设置为0

问题是,有两个 CTRL 键。因此,如果我执行以下操作:首先按下左 CTRL 键,然后在按下它的同时,同时按下右 CTRL 键(这样 CTRL kbd> 键现在被按下),然后我只释放其中一个,keyup 被触发,变量 ctrl 设置为 0,即使另一个 CTRL 键仍在按下。

如何触发事件,以便仅当两个 CTRL 键都打开时才将变量设置为 0(我不需要完全区分它们)。

【问题讨论】:

    标签: javascript dom-events keydown keyup


    【解决方案1】:

    更新:现在可以在现代浏览器中实现这一点

    在Javascript中检测左右控制键的最简单方法

    $(document).ready(function(){
      $("html").keydown(function(e) {
    
          if (e.ctrlKey) {
             if (event.location == 1) console.log('left ctrl');
             if (event.location == 2) console.log('right ctrl');
          }
    
      });
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

    注意:当你运行代码 sn-p 来激活键盘按键时,你必须点击里面的空白。这是在 Chrome 和 Safari 中测试的。

    【讨论】:

      【解决方案2】:

      keydown 事件的 this 有两个属性。 您可以使用

      区分左右 Ctrl
      if ( e.location == 1 || e.keyLocation == 1 ) {
          var keyPosition = 'left';
      } else if ( e.location == 2 || e.keyLocation == 2 ) {
          var keyPosition = 'right';
      }
      

      【讨论】:

        【解决方案3】:

        除非你写在低级上,否则我认为没有办法...... keyCode 对于两者都是相同的(它是 17)

        只是你可以使用 e.ctrlKey 来判断是否按下了控制键。

        但是我阅读并发现 one answer 提到你可以在 IE 中做到这一点,但我没有从我这边尝试过

        【讨论】:

          【解决方案4】:

          您可以使用 e.originalEvent.location 代替全局 event.location

          $(document).ready(function(){
            $("html").keydown(function(e) {
          
                if (e.ctrlKey) {
                   if (e.originalEvent.location === 1) console.log('left ctrl');
                   if (e.originalEvent.location === 2) console.log('right ctrl');
                }
          
            });
          });
          <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

          【讨论】:

            【解决方案5】:

            以下是您对三个鼠标按键事件的回答。为鼠标滚轮休息,您应该再次询问:

            /*
             1 = Left   Mousebutton
             2 = Centre Mousebutton
             3 = Right  Mousebutton
            */
            
            $(document).mousedown(function(e) { 
            if (e.which === 3) {
                /* Right Mousebutton was clicked! */
                alert("right key code 3");
            }
            else if(e.which === 2) {
                alert("Centre key code 2");
            }
            else if(e.which === 1) {
                alert("Left key code 1");
            }
            });
            

            【讨论】:

            • 请仔细阅读问题,这与我的问题相去甚远!
            【解决方案6】:

            你可以用这个:

            $('#inputboxinput').bind('keypress', function(e) {
            if(e.keyCode==13){
                // Enter pressed... do anything here...
            }
            

            });

            跨浏览器方式:

            if (!event.which && ((event.charCode || event.charCode === 0) ? event.charCode: event.keyCode)) {
                event.which = event.charCode || event.keyCode;
            }
            

            【讨论】:

            • 你读过这个问题吗?此外,jQuery 已经内置了event.which。你不需要重新发明它。
            • 嗯,你能更详细地解释一下你的答案吗?我认为这行不通……
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-12-23
            • 1970-01-01
            • 2023-03-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多