如何检测Ctrl+R键是否被按下?

29

我在编写一个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。我已经纠正了。 - karim79
如果您删除原始问题,它对未来的人将没有用处,请保留原始问题,如果您有另一个问题,请打开一个新问题。 - Alan Jackson
11个回答

53

你需要使用 keydown 函数来捕获 Ctrl 按键。这里是我实现的 Ctrl+A

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

由于在大多数浏览器中,Ctrl-R 代表着重新加载页面,这使得实现此功能变得更加困难。这意味着 JavaScript 不会运行,页面将被刷新。

另外需要注意的是,在 keydown/keyup 函数和 keypress 函数中,keyCode 值是不同的。

修改:已移除 ctrl 变量,忘记了 ctrlKey。


那个变量需要严肃的闭包。 - Josh Stodola
不需要那个变量,忘记了ctrlKey。感谢lincolnk和Josh。 - Alan Jackson

5

这是我用来禁用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) - 返回true表示为Firefox浏览器。


1
用户没有要求禁用F5,所以您的回答(虽然有帮助)并没有回答问题。 - George Stocker
1
另外,你正试图禁用基本浏览器功能,这真是令人震惊的。无论你试图解决什么问题,这都不是正确的答案。 - Jon z

5
这里有一个完整的按键码列表,可以在这里查看。

1
链接失效了。有更新的资源吗? - BReal14

2

这里有一个布尔属性叫做ctrlKey,你应该能够在这里使用它...

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

2
为什么你不使用 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);

没问题。

1

使用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文档

支持的浏览器


1
 $(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");
        }     
    });
});

按键码


0

Ctrl键的键码是11

$(document).keypress(function(e) { 


  alert("Ctrl is pressed: " + e.ctrlKey); 
}); 

0
  • 纯JavaScript和KeyboardEvent.key
  • 支持MAC的metaKey
  • 使用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);
  }
});

-1
@HostListener('window:keydown', ['$event'])
  keyEvent(event: KeyboardEvent) {

   if (event.ctrlKey && event.keyCode == 82)
    {

    }
  }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接