javascript - 如何确定用户何时离开网页(不包括某些链接)

标签 javascript grails redirect onbeforeunload

情况:我有一个包含两个表的 Grails 网页。一个表显示一个人的信息(包括某些标志),第二个表有一个带有“添加按钮”的标志列表,允许用户为自己添加一个给定的标志。

现在,有一个保存按钮,单击该按钮会将用户标志的当前“状态”推送到我们的数据库。因此,如果在用户尝试导航到网站的另一部分时显示未保存的信息,我希望能够显示提示。通过使用每个标志存储的现有 isDirty bool 值,这很容易。我可以循环遍历人员的事件标志并检查它是否脏了。如果此人至少包含 1 个脏标志,我需要在他们试图离开时显示提示,因为除非他们明确按下按钮,否则不会保存该数据。

问题:有许多方法可以离开该页面。我在用 <body onbeforeunload="checkForDirtyFlags();"> ,其中 checkForDirtyFlags() 是一个基本的 js 函数,用于检查任何脏标志。但事情是这样的——当用户添加或删除一个标志时,会导致页面重新加载,因为页面设置的方式是重定向到这样的 url:

"http://my.url/addFlag/123456"

Controller 然后知道将 id 为 123456 的标志添加到当前人。但是,这不会改变此人在网站中的位置,因为仍然呈现相同的页面(它只包含更新的表格)。所以基本上,当我看到带有 addFlag 或 removeFlag 的 URL 时,我不想提示用户是否确定要离开该页面,因为在用户眼中他们并没有离开该页面。

问题:有什么方法可以确定 onbeforeunload 期间的目标是什么?这样我就可以在我的 javascript 中有这样的东西:

function checkForDirtyFlag() {
    if( justAdding ) { //We are just adding a flag. No prompt necessary
        //Don't do anything
    }
    else if( justRemoving ) { //We are just removing a flag. No prompt necessary
        //Don't do anything
    }
    else { // In this case, we want to prompt them to save before leaving
        alert('You have unsaved data on the page. Leaving now will lose that data. Are you sure you want to leave?');
    }
}

如果有任何不清楚的地方,请告诉我,我会尽力解决。

谢谢!

最佳答案

我认为您无法在卸载事件中获取目标位置。我要做的是将保存/提交按钮绑定(bind)到一个函数,该函数在按下按钮时禁用卸载事件,从而禁用提示。如果用户试图通过按返回等方式离开,则会触发卸载事件。

关于javascript - 如何确定用户何时离开网页(不包括某些链接),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6846852/

相关文章:

java - Azure mongodb $in 查询不起作用

python - 如何在 Django 中重定向到不同的 URL?

networking - 如何在没有不受信任的服务器问题的情况下将 Internet https 请求重定向到 Intranet https 服务器

javascript - ASP.Net 变量到 JavaScript

javascript - 尝试使用 JSON 获取级联 DDL 但未得到响应

grails - 仅在特定字段上使用convertEmptyStringsToNull = false?

grails - 亚马逊网络服务-入门

redirect - 银条纹。如何从www.域名重定向到域名?

javascript - 配置资源提供者时出错

javascript:如果数组中的值在另一个数组中,则只删除一次该值