Javascript:通过Ctrl和R阻止页面刷新

时间:2017-10-23 04:47:56

标签: javascript

我试图仅在用户点击带有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。我知道这不是一个理想的解决方案,但这是我在等待错误解决的同时解决网页上的错误的唯一解决方案。

2 个答案:

答案 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应用程序的某些部分上进行快捷方式,而不是文档本身。这就是为什么我从来没有谈到在这个答案中阻止页面刷新的原因(这需要一些额外的工作来在所有平台上使用这个意图)。