ismail baig ismail baig - 6 months ago 206
jQuery Question

capturing f5 keypress event in javascript using window.event.keyCode in window.onbeforeunload event is always 0 and not 116

i am creating an MVC application.There was a neccessitity to make a variable in a session to null upon closing of the application (i.e. window/tab) but not upon refreshing the application.
I tried it through the following code.

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


But when F5 is pressed then, "window.event.keyCode" is always 0 and not 116.
Because of which my variable is becoming null even upon F5 key press which is not my requirement.

Even when the application (i.e. webpage) is closed,even then its 0 (which is probably correct).

Please note that the above part of the code is in .cshtml file.

Can anyone tell where am i wrong ?

meo meo
Answer

You have to listen to different events if you want this to work crossborwser + you have to listen to the keyevent every time its pressed, not on load:

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

here is a demo: http://jsfiddle.net/FSrgV/1/embedded/result/

but if you are simply want to know if the user quits the page you could simply use window.onbeforeunload: https://developer.mozilla.org/en-US/docs/DOM/window.onbeforeunload