【问题标题】:How to detect that Ctrl+R was pressed?如何检测 Ctrl+R 被按下?
【发布时间】:2011-02-15 13:32:30
【问题描述】:

我正在 jquery 中编写一个函数,如果按下 Ctrl+R 则执行该函数,但我似乎无法找出左右 ctrl 键码是什么...有人可以帮忙吗?

更新

    ///this works
    $(document).keydown(function(e){
      if(e.keyCode==17){alert("control was pressed")};
 });

下一个问题-- 如何链接控制按键和另一个按键以执行功能?

  if(e.keyCode==17){llCtrlPress=1};
   if(e.keyCode==97 && llCtrlPress=1){DO SOMETHING}
  ????????????

这似乎可以正常工作,但是我如何在键盘上将 llCtrlpress 设置回“0”?

【问题讨论】:

  • @sadmicrowave - 我搞砸了 :( 应该是 17 岁。我现在已经更正了。
  • 如果您删除原来的问题,它对以后的人没有用处,请留下您原来的问题,如果您有另一个问题,请打开一个新问题。

标签: jquery controls keycode


【解决方案1】:

Here 是您可以使用的键码的完整列表。

【讨论】:

  • 链接已失效。更新了资源?
【解决方案2】:

您必须使用 keydown 功能来捕获 Ctrl 字符。这是我对 Ctrl+A 的实现:

    $(document).keydown(function(e) {
        if (e.keyCode == 65 && e.ctrlKey) {
            alert('ctrl A');
        }
    });

Ctrl-R 更难,因为在大多数浏览器中,即 Reload Page,这意味着 javascript 不运行,页面被刷新。

请注意,keydown/keyupup 函数中的 keyCode 值与 keypress 函数中的值不同。

编辑:删除了 ctrl 变量,忘记了 ctrlKey

【讨论】:

  • 该变量需要严格关闭
  • 反正不需要这个变量,忘了ctrlKey。谢谢林肯和乔希。
【解决方案3】:

有一个名为ctrlKey 的布尔属性,您应该可以在这里使用它...

$(document).keypress(function(e) { 
   alert("Ctrl is pressed: " + e.ctrlKey); 
}); 

【讨论】:

    【解决方案4】:

    你为什么不使用e.ctrlKey

     if (e.keyCode == 65 && e.ctrlKey) {
         alert('ctrl A');
     }
    

    编辑:这里有一个合适的函数来检测你的 ctrl-r 按键并阻止浏览器重新加载。

    function keydown(e) {
        if (e.ctrlKey && e.keyCode == 82) {
            // 82 = r
    
            // TODO: your thing.
    
            if (e.preventDefault) {
                e.preventDefault();
            }
            else {
                return false;
            }
        }
    }
    

    我是 jquery 新手,我想你会的

    $(document).keydown(keydown);
    

    对吗?

    【讨论】:

      【解决方案5】:

      Ctrl键的键码是11

      $(document).keypress(function(e) { 
      
      
        alert("Ctrl is pressed: " + e.ctrlKey); 
      }); 
      

      【讨论】:

        【解决方案6】:

        这是我用来在 IE 和 firefox 上禁用刷新的代码(这适用于 F5Ctrl+F5Ctrl+R)

        <script language="javascript" type="text/javascript">
            //this code handles the F5/Ctrl+F5/Ctrl+R
            document.onkeydown = checkKeycode
            function checkKeycode(e) {
                var keycode;
                if (window.event)
                    keycode = window.event.keyCode;
                else if (e)
                    keycode = e.which;
        
                // Mozilla firefox
                if ($.browser.mozilla) {
                    if (keycode == 116 ||(e.ctrlKey && keycode == 82)) {
                        if (e.preventDefault)
                        {
                            e.preventDefault();
                            e.stopPropagation();
                        }
                    }
                } 
                // IE
                else if ($.browser.msie) {
                    if (keycode == 116 || (window.event.ctrlKey && keycode == 82)) {
                        window.event.returnValue = false;
                        window.event.keyCode = 0;
                        window.status = "Refresh is disabled";
                    }
                }
            }
        </script>
        

        如果不想使用useragent检测是什么类型的浏览器($.browser使用navigator.userAgent判断平台),可以使用

        if('MozBoxSizing' in document.documentElement.style) - 为 firefox 返回 true

        【讨论】:

        • 用户没有要求禁用 F5,因此您的回答(虽然有帮助)没有回答问题。
        • 另外,你试图禁用基本的浏览器功能是很可怕的;无论您要解决什么问题,这都不是正确的答案。
        【解决方案7】:
         $(document).ready(function () {
             $(document).keyup(function (e) {
                 if (e.keyCode == 81 && e.ctrlKey) { //CTRL+Q
                     alert("CTRL+Q");
                 } else if (e.keyCode == 27) { //ESCAPE
                     alert("escape");
                 } else if (e.keyCode == 67 && e.altKey) { // ALT+C
                   alert("ALT+C");
                }     
            });
        });
        

        key codes

        【讨论】:

          【解决方案8】:

          使用 event.key 和现代 JS!

          $(document).keypress(function(event) {
              if (event.key === "r" && event.ctrlKey) {
                  // Do something
              }
          });
          

          或者没有 jQuery:

          document.addEventListener("keypress", function onEvent(event) {
              if (event.key === "r" && event.ctrlKey) {
                  // Do something better
              }
          });
          

          Mozilla Docs

          Supported Browsers

          【讨论】:

            【解决方案9】:
            @HostListener('window:keydown', ['$event'])
              keyEvent(event: KeyboardEvent) {
            
               if (event.ctrlKey && event.keyCode == 82)
                {
            
                }
              }
            

            【讨论】:

              【解决方案10】:

              我们也可以使用ASCII码来查找字符以及字符

              $('html').keydown(function (e) {
                   keydownfunc(e);
              });
              function keydownfunc(e) {
                 if (e.ctrlKey && (e.key === "r" || e.key === "R")) {
                     alert("ctrl+R");
                 }
                  }
              

              【讨论】:

              • 嗨。这重复了许多其他答案。如果您同意,请删除它。 (而且 ASCII 根本不涉及 JavaScipt 和 HTML。请参阅 KeyboardEvent.key )如果有兴趣回答最新的 JavaScript 问题,请尝试search 或标记订阅。
              【解决方案11】:
              • 纯 JavaScript 和 KeyboardEvent.key
              • 支持metaKey MAC
              • 使用Event.preventDefault() 防止重新加载
              window.addEventListener("keydown", (ev) => {
                if (ev.key === "r" && (ev.ctrlKey || ev.metaKey)) {
                  ev.preventDefault(); // Prevent browser reload on CTRL+R
                  console.log(ev.key);
                }
              });
              

              【讨论】:

                猜你喜欢
                • 2011-11-13
                • 2015-10-18
                • 2016-05-31
                • 2021-09-23
                • 1970-01-01
                • 2016-11-11
                • 1970-01-01
                • 2019-04-09
                • 1970-01-01
                相关资源
                最近更新 更多