如何在关闭一次对话框后禁用该对话框
How to disable dialog box after closing it once?
这里是用例:
如果用户对该对话框作出响应,系统将提示用户一个对话框,则该对话框不应再次出现在用户面前。这可以通过删除类似$("#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()
}
});
- 复选框:一次只允许单击一个复选框
- 复选框一次选中一个不在gridview中工作
- 复选框一次选中一个不起作用
- 确认对话框多次触发
- jQuery UI对话框在页面上只显示一次
- 每 3 小时显示一次对话框
- 仅附加文本框一次
- jQuery UI 对话框 - 第二次显示未选择的文本
- jQuery UI 对话框模式仅使用类选择器打开一次
- Jquery 对话框多次未加载
- 为什么警报框一次又一次地出现
- Jquery UI对话框只显示一次
- 聚合物纸对话框第一次打开时未居中
- 如何在关闭一次对话框后禁用该对话框
- 关闭JQueryUI对话框只能工作一次
- 对话框多次打开
- 点击& # 39;+添加# 39;使addRow对话框多次触发
- 如何将选中的复选框一次限制为一个
- 为什么这个JQuery对话框一次又一次地出现
- Javascript显示html页在阴影框一次