如何检测按Ctrl + R?

时间:2010-05-04 16:34:03

标签: jquery controls keycode

我在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}
  ????????????

看起来它可以正常工作但是如何在keyup上将llCtrlpress设置回'0'?

11 个答案:

答案 0 :(得分:46)

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

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

Ctrl-R更难处理,因为在大多数浏览器中,重新加载页面,这意味着javascript不会运行,页面会刷新。

同样需要注意的是,keydown / keyupup函数中的 keyCode 值与keypress函数中的值不同。

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

答案 1 :(得分:5)

Here是您可以使用的完整密钥代码列表。

答案 2 :(得分:4)

这是我用来禁用IE和firefox刷新的代码(适用于 F5 Ctrl + F5 控制 + - [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

答案 3 :(得分: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);

正确?

答案 4 :(得分:1)

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

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

答案 5 :(得分: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");
        }     
    });
});

key codes

答案 6 :(得分: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 Docs

Supported Browsers

答案 7 :(得分:0)

Ctrl 键的密钥代码为11

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


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

答案 8 :(得分:0)

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

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

    }
  }

答案 9 :(得分:0)

我们还可以使用Ascii代码查找字符以及字符

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

答案 10 :(得分:0)

  • 纯 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);
  }
});
相关问题