【发布时间】: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