我有以下代码:
<html>
<head>
</head>
<body>
<form method="post" action="something.php" name="myForm">
<input type="submit" name="homepage" value="Please Work" id="homepage">
</form>
<script>
var btn = document.getElementById('homepage'),
clicked = false;
btn.addEventListener('click', function () {
clicked = true;
});
window.onbeforeunload = function () {
if(!clicked) {
return 'If you resubmit this page, progress will be lost.';
}
};
</script>
</body>
</html>
当用户离开页面时(“后退”或“刷新浏览器按钮”),此代码会弹出一个确认框,而不会在单击表单内的按钮时弹出。
问题 当用户点击&#34;离开此页面时,如何重定向到其他页面?确认框的按钮?我尝试了不同的方法,但它不起作用。我使用谷歌浏览器。
非常感谢任何帮助。先感谢您。 :)
修改
所以我得到了一些实际有效的代码,但事实恰恰相反。当我点击&#34;离开此页&#34;它停留,当我点击&#34;留在这个页面&#34;它重定向。
var onUnloadClick = 0;
function redirectTimer() {
setInterval(function(){window.location = "sample exam.php"},10);
}
var btn = document.getElementById('homepage'),
clicked = false;
btn.addEventListener('click', function () {
clicked = true;
});
window.onbeforeunload = onbeforeunload_Handler;
function onbeforeunload_Handler() {
if(!clicked) {
if(onUnloadClick == 0) {
redirectTimer();
return 'If you resubmit this page, progress will be lost.';
}
}
};
问题 我将如何修改此代码并执行相反的功能?
答案 0 :(得分:1)
你不能搞乱浏览器进程。如果单击后退,它将返回。如果单击“刷新”,则会刷新页面。他们在那里的原因是因为他们有自己的功能。你可以尝试不同的方法来做你想做的事情,但我认为这不可能。
答案 1 :(得分:0)
我不认为这是可能的。在这里查看答案: Intercept selection in window.onbeforeunload dialog
没有定义的方法来拦截onbeforeunload事件。在这里可以看到进一步的参考: Intercept selection in window.onbeforeunload dialog
当启动onbeforeunload事件时,用户已经选择了他想要去的地方;如果浏览器允许网页上的javascript覆盖用户的操作,则没有意义。
因此,无论如何都不应该将用户带到除用户想去的地方之外的其他位置。
更新了已更新问题的答案: 它不可能做你想做的事。当您选择&#34;留在此页面时,您被重定向的原因&#34;而不是因为你的javascript函数重定向只生效为什么你留在页面上。当您选择离开页面时,浏览器将不再执行您的任何代码。因为浏览器不希望您覆盖用户的选择。
我的建议: 重新思考你想要的东西。当用户尝试转到其他位置时,您希望将用户重定向到其他页面。我真的不认为这是正确的。
你的最终目标是什么?如果你让我知道......可能我可以为你提供更好的解决方案。