如何在关闭一次对话框后禁用该对话框

How to disable dialog box after closing it once?

本文关键字:对话框 一次      更新时间:2023-09-26

这里是用例:

如果用户对该对话框作出响应,系统将提示用户一个对话框,则该对话框不应再次出现在用户面前。这可以通过删除类似$("#dialog-box").remove()的对话框来完成但问题是在刷新时,对话框将再次出现。

我对解决方案的猜测(不确定这是否可能):

当用户响应对话框时,创建某种全局变量,如SHOW='true',当刷新页面时,查看SHOW是否为true,然后从DOM中删除对话框。

欢迎对此提出任何想法。

解决方案

使用cookie方法类似于:

当名称为"dialogbox"的cookie值不存在时,创建cookie给定值为"foo"。如果cookie的值为"foo",则只显示对话框。当用户响应对话框时,将该cookie的值更改为"bar"。由于cookie值不是"foo",因此对话框将不会出现。

发现这很有用。

感谢您的回答和评论。

有多种解决方案,第一种是使用服务器端验证。正如您所说,要创建一个变量,如果HTML必须显示对话框,那么它必须显示,否则HTML甚至不会将对话框传递给用户。

否则,将其另存为用户浏览器的缓存对象。通过这种方式,jQuery或JavaScript将处理它,并向用户显示/不显示拨号。

每次刷新页面时,都会还原所有全局变量。要在页面重新加载之间存储状态,您必须在服务器端使用一些持久存储(Cookie、客户端的本地存储)或(会话、数据库)。

您可以在第一次显示cookie时使用set,如果设置了cookie,则在显示复选框之前使用set。如果设置了cookie,请删除或不显示该框。如果没有设置cookie,则显示它。

使用全局变量是不可能的,因为在刷新时它会被恢复。

如果您只想使用javascript/jQuery,我建议在accept时向url添加一些参数,并检查它是否存在于代码中。

否则,请使用会话、cookie或某种存储。

正如其他答案所建议的,有多种方法可以实现行为。以下是Cookie方法。

当对话框关闭时,添加一个cookie:

document.cookie="dialogShown=1; expires=Thu, 18 Dec 2014 12:00:00 UTC; path=/"; // this cookie will expire on 18th of Dec this year

现在,将对话框设为初始隐藏,仅在加载DOM且cookie不存在后显示:

// From: http://www.w3schools.com/js/js_cookies.asp
function getCookie(cname) {
    var name = cname + "=";
    var ca = document.cookie.split(';');
    for(var i=0; i<ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1);
        if (c.indexOf(name) != -1) return c.substring(name.length,c.length);
    }
    return "";
} 
function cookieExists(name) {
    return getCookie(name) != "";
}
$(document).ready(function() {
    if(!cookieExists("dialogShown")) {
        $("#dialog-box").show()
    }
});