Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 警告用户刷新页面但允许更改url?_Javascript_Jquery - Fatal编程技术网

Javascript 警告用户刷新页面但允许更改url?

Javascript 警告用户刷新页面但允许更改url?,javascript,jquery,Javascript,Jquery,我有下面的代码,如果用户刷新工作正常的页面,它将警告用户 但是,当用户单击某个按钮或可能只是href='#'的内容,甚至我的网站更改了url时,他们也会收到警告。如何仅在他们尝试刷新浏览器时显示此警报 谢谢 window.onbeforeunload = function (e) { e = e || window.event; // For IE and Firefox prior to version 4 if (e) { e.returnValue

我有下面的代码,如果用户刷新工作正常的页面,它将警告用户

但是,当用户单击某个按钮或可能只是href='#'的内容,甚至我的网站更改了url时,他们也会收到警告。如何仅在他们尝试刷新浏览器时显示此警报

谢谢

window.onbeforeunload = function (e) {
    e = e || window.event;

    // For IE and Firefox prior to version 4
    if (e) {
        e.returnValue = 'WARNING: You are about to reload this page, doing so will loose all your open tabs and loose any unsaved data.';
    }

    // For Safari
    return 'WARNING: You are about to reload this page, doing so will loose all your open tabs and loose any unsaved data.';
};
概念解决方案(在jQuery中):


编辑:当然条件的前提是针对传出链接,因此我们可能应该检查http,或者其他区分本地和传出链接的方式。

拼写修复:
丢失
松散:)lol谢谢-那会很尴尬:)我不想挑剔,但我不会写,要么.-)我看到这一效果的唯一方法是,如果页面上有任何内容发生更改且未保存,则全局变量将实际设置为TRUE,然后在保存时设置为FALSE-这样,您就可以知道对话框在任何情况下都应该在访问者面前出现,为
窗口分配函数。不建议使用onbeforeuload
(因为它可以覆盖分配给相同beforeunload函数的其他函数)…和
attachEvent
处理程序是更好的选择;-)太好了,听起来是个好主意!谢谢:)请注意,这并不能解释通过onClick处理程序从锚和表单以外的元素通过以下语法进行JS重定向:
window.location.href='page.html'
或元重定向。尽管这是一个好的解决方案,但您只捕获了某些导航操作。当用户通过键入URL或使用back或forward离开页面时会怎么样?@Buchow\u PHP在这种情况下,onbeforeupload事件应该触发(实际上,你已经让我思考了,我不再确定:D)。不幸的是,由于不可能访问历史对象(就用户之后访问的内容或之前到达给定页面的内容而言),因此(我认为)完全在JS中这样做是不可能的。在FF下测试了后退和前进按钮,是的,单击它们会在卸载之前启动(为什么我怀疑它不会:D)。虽然我发现对于后退按钮,我们可以访问
文档.referer
(对于非
历史
操作页面,这应该是上一页?)
var going_away = true;
$("a").click(function()
{
// if it's local link - $(this).attr('href').indexOf("#") == 0 || $(this).attr('href').indexOf("/") == 0
   going_away = false;
});

$("form").submit(function()
{
// if it's local action - $(this).attr('action').indexOf("/") == 0
   going_away = false;
});

window.onbeforeunload = function (e) {
   if (going_away)
       window.confirm(...)
}