如何检测 Ctrl+R 被按下?

Posted

技术标签:

【中文标题】如何检测 Ctrl+R 被按下?【英文标题】:How to detect that Ctrl+R was pressed? 【发布时间】: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 岁。我现在已经更正了。 如果您删除原来的问题,它对以后的人没有用处,请留下您原来的问题,如果您有另一个问题,请打开一个新问题。 【参考方案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);
  
);

【讨论】:

以上是关于如何检测 Ctrl+R 被按下?的主要内容,如果未能解决你的问题,请参考以下文章

如何检测音量上下是不是被按下

检测功能键被按下的最佳方法是啥?

汇编语言检测鼠标右键是不是被按下了

检测iPad的屏幕何时关闭或Unity中的Home按钮被按下事件?

我试图检测某个被按下的键(Python)

检测 F5 被按下并刷新