【问题标题】:Dialog appears on every refresh每次刷新都会出现对话框
【发布时间】:2018-05-17 16:33:13
【问题描述】:

我必须在我的入口网站中建立一个对话框。问题是,它每次都会出现,我无法关闭它(单击按钮只会刷新站点,对话框再次出现)。我也知道原因,但我能够解决它。

这是我的对话

<p:dialog id="ac-wrapper" widgetVar="test" style='display: none; background:white;' modal="true"
                resizable="false" closeOnEscape="true" closable="true" visible="true">
                <div id="popup">    
                    <h2>Some Content</h2>
                        <input type="submit" name="submit" value="Submit"
                                onclick="DialogBox('hide')" />
                </div>
            </p:dialog>

这里是应该处理这个的javascript:

 <script type="text/javascript">

            $ = jQuery;
            function DialogBox(hideOrshow) {

                if (hideOrshow == 'hide') {
                    localStorage.setItem("isShown",1);
                    document.getElementById('ac-wrapper').style.display = "none";
                    document.getElementById('ac-wrapper').visible="false";
                    $("#ac-wrapper").close();
                }
                else  if(localStorage.getItem("isShown") == null) {
                    document.getElementById('ac-wrapper').removeAttribute('style');
                    localStorage.setItem("isShown",1);
                }
            }

            window.onload = function () {
                setTimeout(function () {
                    if(localStorage.getItem("isShown") != 1 ){
                        DialogBox('show');
                    }
                    else if(localStorage.getItem("isShown")){
                        $("#ac-wrapper").remove();
                    }}, 1000);
            }
            </script> 

通过渲染站点,对话框总是出现,因为 visible 属性设置为“true”。我猜顺序不正确。它应该首先检查本地存储,然后渲染元素,我没有让它正常工作。我也在这里寻找类似问题的答案,但没有任何帮助。

【问题讨论】:

  • 永远不要调用提交,不要使用提交作为按钮,改为type="button" value="Close"
  • 为什么还要混合使用 DOM 和 jQuery?如果你有 jQuery,请使用它
  • 这样的。由于您选择 isShown 与 show function DialogBox(hideOrshow) { var show = hideOrshow != 'hide'; // makes more sense localStorage.setItem("isShown", show); $('#ac-wrapper').toggle(show) if (!show) $("#ac-wrapper").close(); } $(function() { setTimeout(function() { var show = localStorage.getItem("isShown") == 1; if (show) { DialogBox('show'); } else $("#ac-wrapper").remove(); }, 1000); } ,我可能会产生您想要的相反效果
  • 如果 cmets 解决了您的问题,请随时删除问题
  • 你有visible="true"所以每次都显示是正常的

标签: javascript web cookies primefaces dialog


【解决方案1】:

问题是这样的

 <input type="submit" name="submit" value="Submit"
                            onclick="DialogBox('hide')" />

因为它是一个输入类型提交,它默认为表单行为...即使用 GET 重定向到相同的 url。将类型和值更改为“按钮”和“关闭”,您的问题将得到解决

【讨论】:

  • 我已经在问题下对此发表了评论。顺便说一句,表单的默认行为是 GET
  • 已编辑,谢谢。如果您想重新发布您的评论作为答案,我很乐意删除我的
  • 没关系。我更喜欢删除这个问题 - 它对其他人不是超级有用
猜你喜欢
  • 2014-01-15
  • 2013-04-01
  • 2015-10-15
  • 1970-01-01
  • 2016-02-03
  • 1970-01-01
  • 2020-07-29
  • 2016-06-29
  • 1970-01-01
相关资源
最近更新 更多