当用户尝试离开页面,关闭选项卡或浏览器本身时,我需要弹出警告。我能够使用下面的window.onbeforeunload调用成功构建该窗口。此后,客户将要求修改为仅在网页上有未保存的编辑时才弹出。
我为页面上的必要字段onChange事件添加了一个sessionScope.Changed = true,并在单击“保存”时将值重置为false。我已经确认sessionScope变量设置正确。但是,无论值是-true还是false,我都无法正确启动弹出窗口。我还尝试过将if / then包裹在window.onbeforeunload行周围,并仅向函数返回消息。
是sessionScope在页面脚本上根本不可用,还是我引用不正确,还是其他原因?
编辑:我的页面使用一系列堆栈容器来模拟选项卡式界面。一旦用户单击另一个选项卡而不保存,此结构似乎会阻止内置的enableModifiedFlag,这就是为什么我沿着sessionScope变量的路径走了。
先感谢您!
<script language="JavaScript">
var ch = '#{sessionScope.Changed}';
window.onbeforeunload = confirmExit;
function confirmExit() {
if (ch == true){
return "You have attempted to leave this page. If you have > made any changes without clicking the Save button, your changes will > be lost. Are you sure you want to exit this page?";
}
else {
return "";
}
</script>
最佳答案
最可能的问题是对时间的误解。如果查看源HTML,则会在浏览器页面上看到对#{sessionScope.Changed}
的引用。这是因为只能在服务器上评估表达式语言(#{sessionScope.Changed}
)。因此,然后将结果作为文字值传递给客户端JavaScript。因此,除非每当发生更改时都进行部分刷新,否则该值将不会被更新,因此您将像首次将HTML传递给浏览器时的值进行测试。