【问题标题】:display a popup once a day using cookies使用 cookie 每天显示一次弹出窗口
【发布时间】:2019-03-27 00:38:21
【问题描述】:

我正在尝试使用 cookie 每天显示一次弹出窗口,但它不起作用。这是 html、css 和 js:

function showpopup() {

  var id = '#dialog';
  var maskHeight = $(document).height();
  var maskWidth = $(window).width();
  $('#mask').css({
    'width': maskWidth,
    'height': maskHeight
  });
  $('#mask').fadeIn(500);
  $('#mask').fadeTo("slow", 0.9);
  var winH = $(window).height();
  var winW = $(window).width();
  $(id).css('top', winH / 2 - $(id).height() / 2);
  $(id).css('left', winW / 2 - $(id).width() / 2);
  $(id).fadeIn(2000);
  $('.window .close').click(function(e) {
    e.preventDefault();
    $('#mask').hide();
    $('.window').hide();
  });
  $('#mask').click(function() {
    $(this).hide();
    $('.window').hide();
  });

}
$(function() {
  if ($.cookie('alreadyShow') === null) {
    $.cookie('alreadyShow', true, {
      expires: 1
    });
    showpopup();
  }
});
#mask {
  position: absolute;
  left: 0;
  top: 0;
  z-index: 9000;
  background-color: #26262c;
  display: none;
}

#boxes .window {
  position: absolute;
  left: 0;
  top: 0;
  width: 440px;
  height: 850px;
  display: none;
  z-index: 9999;
  padding: 20px;
  border-radius: 5px;
  text-align: center;
}

#boxes #dialog {
  width: 450px;
  height: auto;
  padding: 10px 10px 10px 10px;
  background-color: #ffffff;
  font-size: 15pt;
}

.agree:hover {
  background-color: #D1D1D1;
}

.popupoption:hover {
  background-color: #D1D1D1;
  color: green;
}

.popupoption2:hover {
  color: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="http://lab.alexcican.com/set_cookies/cookie.js"></script>
<div id="boxes">
  <div style="top: 50%; left: 50%; display: none;" id="dialog" class="window">
    <div id="san">
      <a href="#" class="close agree">
        <img src="https://cdn4.iconfinder.com/data/icons/ionicons/512/icon-close-512.png" width="25" style="float:right; margin-right: -10px; margin-top: -10px;" alt="" />
      </a>
      <br><br> Visit our new website: <a style="color:blue" target="_blank" href="www.example.come">Example.com</a>.
    </div>
  </div>
  <div id="mask"> </div>
</div>

【问题讨论】:

  • 您在第一个 &lt;script 的末尾缺少一个 &gt;。是真实代码中的拼写错误,还是只是复制错误?
  • 您已经声明了检查 cookie 的函数,但它从未被调用过。尝试在 showPopup 函数中移动 cookie 条件检查作为其在函数中的初始验证。因此,您将首先检查 cookie 是否存在,如果不存在,则设置 cookie 值并继续显示弹出窗口。另一种选择是给这个其他函数一个名称,并实际从 Div 而不是 showPopup() 调用这个函数
  • @adityap - 我认为您没有正确遵循代码,因为它完全按照您的建议执行。如果没有 cookie,则从 IIFE 内部调用 showpopup()
  • @David - 你是对的,对此感到抱歉。请忽略我的cmets
  • 谢谢,请问有什么办法解决吗?

标签: javascript jquery cookies popup


【解决方案1】:

您的问题是以下情况:

if ($.cookie('alreadyShow') === null)

当 cookie 未设置时,$.cookie() 返回undefined
也许您想在undefinednull 之间使用read about the difference

接下来的任何语句都会起作用:

if ($.cookie('alreadyShow') === undefined)
if ($.cookie('alreadyShow') == null)
if (!$.cookie('alreadyShow'))

另外,您正在使用 js-cookie 库的 old version (v1.4.0)。它的作者在删除 jQuery 依赖项后将代码移至new project。您应该考虑升级并指出正确的CDN

请注意,新项目使用的语义略有不同。您的代码如下所示:

if (!Cookies.get('alreadyShow')) {
  Cookies.set('alreadyShow', true, {
    expires: 1
  });
  showpopup();
}

【讨论】:

  • 如果我使用 CDN 版本,我得到 $.cookie 不是一个函数,同时我尝试了这个并且没有工作;常量明天 = 新日期();明天.setDate(明天.getDate() + 1); Cookies.set = "popupShown',true, expires=${ 明天 }"; console.log(Cookies.get('popupShown')); $(function() { if (Cookies.get('popupShown')) { Cookies.set('popupShown', true, {expires: 1}); showpopup(); } });
  • 那是因为上一个版本使用了不同的语法。我发布的代码应该可以与您的代码一起使用(并且我已经测试过,对我来说它可以完美运行)。尝试使用您提供的旧链接。
  • 嗨,我尝试通过这样做来使用你的: $(function() { if (!$.cookie('alreadyShow')) { $.cookie('alreadyShow', true, {expires: 1}); showpopup(); } });
  • 但是每次我刷新页面时都会弹出窗口,不是每天显示一次吗? ...
  • 当我测试弹出窗口第一次显示的代码时,您的设置中是否存在阻止存储 cookie 的内容?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多