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

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

 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; } };  

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

即使应用程序(即网页)关闭,即使它的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

不要使用e.keyCode == 166使用e.code ==’F5’代替。

  function fkey(e){ e = e || window.event; if( wasPressed ) return; function fkey(e){ e = e || window.event; if (e.code === 'F5') { alert("f5 pressed"); wasPressed = true; }else { alert("Window closed"); } } 

这是因为’t’和’F5’都使用键码116.如果你单独使用键码,那么如果用户按下’t’键,你的页面就会刷新。

你可以像这样写:

 $(document.body).on("keydown", this, function (event) { if (event.keyCode == 116) { alert('F5 pressed!'); } }); 

我同意meo的解决方案,但我会添加一些修改。

当我们使用document.onkeydown = fkey; 例如,在页面中我们有另一个方法影响到document.onkeydown然后浏览器将只检测最后一个事件。 但是当我们使用:jQuery(document).on(“keydown”,fkey); 即使我们有另一个函数来处理keydown事件,也会触发所有函数。

看下一个例子来更加了解:

 var wasPressed = false; document.onkeydown = f1; document.onkeydown = f2; jQuery(document).on("keydown",f3); jQuery(document).on("keydown",f4); function f1(e){ e = e || window.event; if( wasPressed ) return; if (e.keyCode == 116) { alert("f5 pressed"); wasPressed = true; }else { alert("Window closed"); } } function f2(){ alert('f2'); } function f3(){ alert('f3'); } function f4(){ alert('f4'); } 

这里将显示的内容:只有3个警报:f2,f3和f4。 并且在此示例中未触发f1函数。

修改版本并在按’t’后也工作。

键84在84后自动按下

 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"); }else { alert("Window closed"); } wasPressed = true; }