我试图仅在用户点击带有R的Ctrl键时阻止页面刷新。
我尝试使用preventDefault()方法,但它不起作用:
function disableCtrlR(s) { if ((s.which || s.keyCode) == 17 && (s.which || s.keyCode) == 82) s.preventDefault(); };
$(document).ready(function(){
$(document).on("keydown", disableCtrlR);
});
对此有任何帮助将不胜感激。感谢。
PS。我知道这不是一个理想的解决方案,但这是我在等待错误解决的同时解决网页上的错误的唯一解决方案。
答案 0 :(得分:2)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
$(document).on("keydown", function(e) {
e = e || window.event;
if (e.ctrlKey) {
var c = e.which || e.keyCode;
if (c == 82) {
e.preventDefault();
e.stopPropagation();
}
}
});
});
</script>
<h1>If you click in here, you won't be able to refresh with Ctrl+R</h1>
<input type="text" />
使用jQuery 2.1.1,这将通过Ctrl + R
禁用重新加载答案 1 :(得分:1)
要检查在按键事件中是否同时按下了控制键,您将检查KeyboardEvent.ctrlKey
属性。
// beware ES6 below, will fail in Netscape
onkeydown = e => {
if(e.key === 'r' && e.ctrlKey){
e.preventDefault();
console.log('ctrl + r')
}
}
<input autofocus>
附录:
正如您在问题中提到的,这非常“不是理想的解决方案”。阻止默认浏览器行为只应在特殊情况下进行,例如阻止 ctrl + R 快捷方式只应在真正需要此功能的Web应用程序的某些部分上进行快捷方式,而不是文档本身。这就是为什么我从来没有谈到在这个答案中阻止页面刷新的原因(这需要一些额外的工作来在所有平台上使用这个意图)。