通过按钮POST Edit
提交表单后,我在视图中有一个表单。如果用户在浏览器中单击“后退”按钮,我希望提交此表单或不做任何事情(保留在同一页面上)。
问题:我可以更改Edit.cshtml
视图的后退按钮的行为以使其不起作用吗?我是说要留在同一页面上?
在Razor视图中进行了尝试。没有结果,没有弹出窗口,什么都没有:
<script>
window.onbeforeunload = function (event) {
var message = 'All changes will get lost!';
if (typeof event == 'undefined') {
event = window.event;
}
if (event) {
event.returnValue = message;
}
return message;
}
</script>
最佳答案
您可以附加两个事件:beforeunload
或unload
。顾名思义,beforeunload
在unload
之前被触发,并有机会在用户许可的情况下取消卸载。您的应用无法强制取消卸载;将向用户显示一个确认对话框,只有当他们选择单击“取消”时,该对话框才会被取消。
因此,要回答部分问题,不可以,您不能强迫用户停留在页面上。如果他们想回去,最终,他们将被允许回去。您最多只能礼貌地要求他们停留在页面上。但是,您可以利用这两个事件中的任何一个,发出同步的AJAX请求,以执行类似保存表单状态的操作。 “同步”部分是关键。如果您使用传统的异步AJAX,浏览器将不会等待响应,而是会在AJAX完成之前卸载页面。
但是,所有这些实际上都是针对不同的年龄的。现在有了诸如HTML5中的本地存储之类的东西,这是处理保存状态的更好的方法。只需在用户更改字段时将他们的输入添加到本地存储中,并且在加载表单时,尝试将本地存储中的所有值读回到其对应的字段中。这样,如果用户返回,转到另一个页面,甚至完全离开了您的网站,那么当他们返回时,表单仍将具有其先前输入的信息。
关于javascript - 更改浏览器中按下后退按钮的行为以保留在同一站点上,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25813676/