使用window.onbeforeunload事件中的window.event.keyCode在javascript中捕获f5按键事件始终为0,而不是116
我正在创建一个MVC应用程序。在关闭应用程序(即窗口/选项卡)时,有必要将会话中的变量设置为null,但在刷新应用程序时不必设置。 我通过以下代码进行了尝试使用window.onbeforeunload事件中的window.event.keyCode在javascript中捕获f5按键事件始终为0,而不是116,javascript,jquery,Javascript,Jquery,我正在创建一个MVC应用程序。在关闭应用程序(即窗口/选项卡)时,有必要将会话中的变量设置为null,但在刷新应用程序时不必设置。 我通过以下代码进行了尝试 <script type="text/javascript"> window.onbeforeunload = function (e) { e = e || window.event; if (window.event.keyCode == 11
<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>
window.onbeforeunload=函数(e){
e=e | | window.event;
if(window.event.keyCode==116){
警报(“按下f5”);
}
否则{
警报(“窗口关闭”);
//调用我的c#代码使我的变量为null,例如:Session[“myVariable”]=null;
}
};
但当按下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");
}
}
下面是一个演示:
但是,如果您只是想知道用户是否退出该页面,您可以简单地使用
窗口。onbeforeunload
:我同意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函数。您可以这样编写:
$(document.body).on("keydown", this, function (event) {
if (event.keyCode == 116) {
alert('F5 pressed!');
}
});
不要使用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。如果您单独使用keycode,那么如果用户按“t”键,您的页面将刷新 修改版本并在按下“t”后工作 84后按116键自动
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;
}
不要使用(e.keyCode==116)检查F5;不要用这个
<script>
document.onkeydown = capturekey;
document.onkeypress = capturekey;
document.onkeyup = capturekey;
function capturekey(e) {
e = e || window.event;
//debugger
if (e.code == 'F5') {
if (confirm('do u wanna to refresh??')) {
//allow to refresh
}
else {
//avoid from refresh
e.preventDefault()
e.stopPropagation()
}
}
}
</script>
document.onkeydown=capturekey;
document.onkeypress=capturekey;
document.onkeyup=capturekey;
功能捕获键(e){
e=e | | window.event;
//调试器
如果(e.code==“F5”){
if(确认('u想刷新吗??)){
//允许刷新
}
否则{
//避免刷新
e、 预防默认值()
e、 停止传播()
}
}
}
您正在将事件存储到变量e中。你为什么不试试e.keyCode
;)你应该听的是按键事件。你好,我已经试过了,但是我得到了同样的结果。然后我尝试了上面提到的代码,但仍然没有成功。你不能在javascript中设置会话变量…如果你想在客户端执行会话,也许你应该看看sessvars.js不e.keyCode
只应用于键盘事件?(另外,即使它确实适用,您也应该在if
语句中测试e.keyCode
,而不是window.event.keyCode
)您好,谢谢您的回答,它在一些修改方面帮助了我。:)我在Oracle ADF中使用了此修改。谢谢。当我使用我的Firefox浏览器进入并按下F5时,我没有看到任何警报或其他东西…不要使用(e.keyCode==116)来检查F5;不要使用thisif(e.code='F5'){//your code here}这绝对不是事实。F5是116。T是84。@在某些浏览器和系统F5上,Adowrath和'T'100%返回116作为键码。
<script>
document.onkeydown = capturekey;
document.onkeypress = capturekey;
document.onkeyup = capturekey;
function capturekey(e) {
e = e || window.event;
//debugger
if (e.code == 'F5') {
if (confirm('do u wanna to refresh??')) {
//allow to refresh
}
else {
//avoid from refresh
e.preventDefault()
e.stopPropagation()
}
}
}
</script>