javascript - 在 window.onbeforeunload 事件中使用 window.event.keyCode 在 javascript 中捕获 f5 按键事件始终为 0 而不是 116

标签 javascript jquery

我正在创建一个 MVC 应用程序。有必要在关闭应用程序(即窗口/选项卡)时将 session 中的变量设置为 null,而不是在刷新应用程序时。 我通过下面的代码试了一下。

<script type="text/javascript">
           window.onbeforeunload = function (e) {
               e = e || window.event;
               if (window.event.keyCode == 116) {
                   alert("f5 pressed");
               }
               else {
                   alert("Window closed");
                   //call my c# code to make my variable null, eg:Session["myVariable"] = null;
               }  
           };
</script>

但是当按下 F5 时,“window.event.keyCode”总是 0 而不是 116。 因此,即使按下 F5 键,我的变量也会变为 null,这不是我的要求。

即使应用程序(即网页)关闭,它仍然为 0(这可能是正确的)。

请注意以上部分代码在.cshtml文件中。

谁能告诉我哪里错了?

最佳答案

如果你想让它在crossborwser上工作,你必须监听不同的事件+你必须在每次按下时监听按键事件,而不是加载时:

document.onkeydown = fkey;
document.onkeypress = fkey
document.onkeyup = fkey;

var wasPressed = false;

function fkey(e){
        e = e || window.event;
       if( wasPressed ) return; 

        if (e.keyCode == 116) {
             alert("f5 pressed");
            wasPressed = true;
        }else {
            alert("Window closed");
        }
 }

这是一个演示:http://jsfiddle.net/FSrgV/1/embedded/result/

但是如果您只是想知道用户是否退出了页面,您可以简单地使用window.onbeforeunload:https://developer.mozilla.org/en-US/docs/DOM/window.onbeforeunload

关于javascript - 在 window.onbeforeunload 事件中使用 window.event.keyCode 在 javascript 中捕获 f5 按键事件始终为 0 而不是 116,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14707602/

相关文章:

javascript - 来自Cloudflare CDN的链接jQuery脚本在控制台中的“sub-include” underscore-min.js上引发CSP错误

JavaScript + Drupal

javascript - JavaScript中变量的范围是什么?

jquery - 使用 Jquery-pt 2 为 Div 一个接一个地制作动画

javascript - 无论如何,要在 doc.ready 事件之前将 JS 注入(inject) iframe 中?

javascript - 降低 JavaScript 应用程序复杂性的最佳方法是在顶部构建/使用 OOP 框架吗?

javascript - navigator.geolocation api 的替代方案

html - 如何在 jquery 中找到第 4 行(tr 元素)的第 2 列(td 元素)的值?

javascript - 如何使用 jquery 检查一行中的所有文本框是否已填充

javascript - 将 href 加载到 iframe 但将其定位在父窗口中