当我选择留在页面上时,window.onbeforeunload不起作用

时间:2014-05-26 14:44:10

标签: java javascript jquery jsf primefaces

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

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

我需要为用户做出确认对话框,例如他按&#34;退出&#34; 我所做的是:

<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)"/>

但是当我选择留在页面上时,我的上传不会显示在列表中。任何想法都值得赞赏

2 个答案:

答案 0 :(得分:0)

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

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

<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();"/>

现在,如果用户上传,则会显示带有短信的弹出窗口。

答案 1 :(得分:0)

通过更改脚本来修复此问题:

<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>