当用户尝试离开页面,关闭选项卡或浏览器本身时,我需要弹出警告。我能够使用下面的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传递给浏览器时的值进行测试。

10-07 12:12