如何对onbeforeunload中的子事件作出反应
How to react to sub events from onbeforeunload?
本文关键字:事件 onbeforeunload 更新时间:2024-03-15
我注意到事件onbeforeunload
能够区分不同的用户操作,例如用户是否按下页面上的链接,用户是否试图关闭页面,用户是否想返回一页等。
例如,如果用户单击某个链接,则会出现一个文本为"是否确实要关闭页面?"的确认框,但如果用户按F5
刷新页面,则框中的文本为"是否确定要刷新页面?"。
是否可以区分onbeforeunload中的不同子事件并对其做出反应?
如果用户试图离开页面,我会尝试将页面的背景色更改为红色,如果用户试图刷新页面,则会将其更改为橙色,这只是一个简单的测试操作,可以更好地理解。
注意:我将提示中的文本从德语翻译成了英语,因此文本可能会有所不同。
侧面问题:如果我在本地Web服务器上运行此代码,如果我单击链接并按"离开页面",为什么确认框会出现两次,而如果我在stackoverflow上运行它,则不会出现?
function ask()
{
return "Are you sure?";
//How can i find out what the user actually tried?
//e.g. did he tried to refresh the page? Or did he tried to close it?
//PSEUDO CODE:
// if (user_tried_reload) { alert("RELOAD"); }
// else if (user_tried_close) { alert ("CLOSE"); }
}
<body onbeforeunload="return ask()">
<h1>onbeforeunload Test</h1>
<a href="http://www.google.de">Google</a>
</body>
用法:按"运行代码片段",然后是单击链接还是尝试刷新页面。
代码触发两次的原因是"离开页面"按钮重新触发卸载事件。
我建议你做的是捕捉F5按键事件,并做你自己的消息:
document.onkeydown = function(evt) {
evt = evt || window.event;
if (evt.keyCode == 116) {
ask('reload');
}
};
在你的ask()函数中,我想要这样的东西:
var howmanytimes = 0;
function ask(action)
{
howmanytimes++;
//PSEUDO CODE:
if (howmanytimes == 1) {
if (action == 'reload') { alert("RELOAD"); }
else { alert ("CLOSE"); }
} else { howmanytimes == 0 };
}
这段代码未经测试,我现在无法访问jsfiddle,希望这能给你指明正确的方向(而且我一开始就正确理解了这个问题!)
相关文章:
- 分派点击事件并保留击键修饰符
- 模糊事件的Javascript测试
- keyup事件处理程序更改焦点不适用于快速键入
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 如何使Javascript动态html表及其上的事件
- 使用类从一个标记中双击事件
- 如何在未直接触发的情况下停止事件
- 如何在elfinder插件(一个文件管理器插件)上获得上传前事件
- 对iPad上的点击事件反应缓慢
- 事件和状态
- Fancybox是否将Click事件静音
- 主干-不管怎样,检查事件以前是否绑定过
- 从控制器返回后Ajax启动事件激发
- 如何从画布上的某个移动事件中获取X和Y
- Jquery:未触发select事件
- JsFiddle上的鼠标事件不起作用
- 只覆盖箭头键滚动事件
- $window.ga在AngularJS事件中未定义
- cron作业与Javascript计时事件
- ng更改事件不适用于Dropdown