28

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

4

11 回答 11

50

您必须使用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

于 2010-05-04T16:50:52.120 回答
5

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

于 2010-05-04T16:41:10.383 回答
5

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

于 2012-11-14T10:44:25.393 回答
2

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

$(document).keypress(function(e) { 
   alert("Ctrl is pressed: " + e.ctrlKey); 
}); 
于 2010-05-04T16:56:46.867 回答
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);

对?

于 2010-05-04T16:58:38.983 回答
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");
        }     
    });
});

关键代码

于 2014-05-13T12:11:18.773 回答
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 文档

支持的浏览器

于 2018-02-18T19:09:50.413 回答
0

密钥的密钥代码Ctrl11

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


  alert("Ctrl is pressed: " + e.ctrlKey); 
}); 
于 2012-04-19T07:29:12.053 回答
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);
  }
});
于 2021-05-14T04:52:48.600 回答
-1
@HostListener('window:keydown', ['$event'])
  keyEvent(event: KeyboardEvent) {

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

    }
  }
于 2019-03-06T09:25:22.343 回答
-1

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

$('html').keydown(function (e) {
     keydownfunc(e);
});
function keydownfunc(e) {
   if (e.ctrlKey && (e.key === "r" || e.key === "R")) {
       alert("ctrl+R");
   }
    }
于 2019-09-07T05:13:07.607 回答