当用户试图离开页面,关闭标签页或浏览器本身时,我需要弹出警告。我能够使用下面的window.onbeforeunload调用成功构建它。客户将需求修改为仅在网页上有未保存的编辑时弹出窗口。
我为页面上的更改事件添加了sessionScope.Changed = true,并在单击“保存”时将值重置为false。我已经确认正确设置了sessionScope变量。但是,无论价值是什么 - 无论是真还是假,我都无法让弹出窗口正确启动。我也试过在window.onbeforeunload行周围包装if / then然后只用返回消息离开函数。
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>
答案 0 :(得分:2)
最可能的问题是对时间的误解。如果您查看源HTML,则会在浏览器页面上看到#{sessionScope.Changed}
没有引用。这是因为表达式语言(#{sessionScope.Changed}
)只能在服务器上进行评估。因此,结果将作为文字值传递到客户端JavaScript。因此,除非您在更改某些内容时进行部分刷新,否则将不会更新该值,因此您将对HTML首次传递到浏览器时的值进行测试。
答案 1 :(得分:1)
您正在设置var ch ='true',但之后尝试测试它是否为布尔值true
从声明行中删除单引号
希望有所帮助
答案 2 :(得分:1)
使用XPage的内置功能显示警告,保留未编辑的页面,其中包含已编辑的字段(而不是带有window.onbeforeunload的CSJS代码):
<xp:view
xmlns:xp="http://www.ibm.com/xsp/core"
...
enableModifiedFlag="true"
modifiedMessage="You have attempted to leave this page....">