【问题标题】:window.onbeforeunload does not work when i choose to stay on the page当我选择留在页面上时,window.onbeforeunload 不起作用
【发布时间】:2014-05-26 14:44:10
【问题描述】:

我有一个用于文件上传的 xhtml 页面:

<p:fileUpload fileUploadListener="#{ContentRepositoryExplorerBean.upload}" 
              update="formId" dragDropSupport="true" multiple="true"/>

当用户按下“退出”时,我需要为用户制作确认对话框 我要做的是:

<script>
        var flag = false;

        function setFlag(v) {
            flag = v;
        }

        function getWarningMessage() {
            if(flag == true) {
                window.onbeforeunload = function() {
                    return 'Please do not leave this page until upload is done';
                }
            }
        }

        $('#logout').click(function() {
            getWarningMessage();
        });
</script>

并添加到 fileUpload onstart 和 oncomplete

<p:fileUpload fileUploadListener="#{ContentRepositoryExplorerBean.upload}"
   update="formId" dragDropSupport="true" multiple="true"
   onstart="setFlag(true)" oncomplete="setFlag(false)"/>

但是当我选择留在页面上时,我的上传内容没有显示在应该显示的列表中。任何想法表示赞赏

【问题讨论】:

  • “上传未显示在列表中应该显示的位置”是什么意思?
  • 我有一个正在显示的文件列表。在我上传文件后,它应该出现在列表中

标签: java javascript jquery jsf primefaces


【解决方案1】:

您可以在上传过程中显示对话框。

创建对话框(在主窗体之外):

<p:dialog widgetVar="statusDialog" modal="true" draggable="false"  header="Loading please wait.........."
            closable="false" resizable="false" showHeader="false">
            <p:outputLabel value="Uploading file..."></p:outputLabel>
        </p:dialog>

将您的 p:fileUpload 更改为

<p:fileUpload fileUploadListener="#{ContentRepositoryExplorerBean.upload}"
   update="formId" dragDropSupport="true" multiple="true"
  onstart="PF('statusDialog').show();" 
  oncomplete="PF('statusDialog').hide();"/>

现在,如果用户确实上传了,那么它将显示一个带有文本消息的弹出窗口。

【讨论】:

  • 谢谢。但这并不是我想要实现的安静。文件上传时,我需要有可能仅在用户尝试注销或关闭浏览器或关闭选项卡时浏览并显示确认对话框。
  • 祝您好运。你在哪里见过这样的东西?
  • 我的客户想要))
【解决方案2】:

通过稍微修改脚本解决了这个问题:

<script type="text/javascript" >
        var flag = false;

        function setFlag(v) {
            flag = v;
        }

        $(document).ready(function() {
            var onclickFunc = new Function($('#logout').attr('onclick'));
            $('#logout').on("click", function(event){
                if(flag == true) {
                    event.stopImmediatePropagation();
                    alert("Please do not leave this page until upload is done");
                }
            }).click(onclickFunc).removeAttr('onclick');

        })
    </script>

【讨论】:

    猜你喜欢
    • 2011-03-15
    • 1970-01-01
    • 2020-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多