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

时间:2014-09-03 12:21:47

标签: javascript jquery

以下是用例:

如果用户响应该对话框,系统会提示用户输入一个对话框,然后该对话框不会再显示给用户。 这可以通过删除$("#dialog-box").remove()之类的对话框来完成 但问题是刷新时会再次出现对话框。

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

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

欢迎提出任何想法。

解决方案

使用cookie方法:

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

发现this很有用。

感谢您的回答和评论。

5 个答案:

答案 0 :(得分:1)

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

否则,将其作为缓存对象保存到用户的浏览器。这样jQuery或JavaScript就可以处理它并向用户显示/不显示dialoug。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您可以在第一次显示时使用设置Cookie,然后在显示框之前检查Cookie是否已设置。如果设置了cookie,则删除或不显示该框。如果没有设置cookie,请显示它。

答案 3 :(得分:0)

您无法使用全局变量执行此操作,因为在刷新时它将被还原。

如果您只想使用javascript / jQuery,我建议在接受时在网址上添加一些参数,并检查它是否存在于您的代码中。

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

答案 4 :(得分:0)

正如其他答案所暗示的那样,有多种方法可以实现这种行为。以下是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()
    }
});