如何检测 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 上禁用刷新的代码(这适用于 F5、Ctrl+F5 和Ctrl+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 被按下?的主要内容,如果未能解决你的问题,请参考以下文章