【问题标题】:Set a jQuery cookie to show popup only once设置一个 jQuery cookie 只显示一次弹出窗口
【发布时间】:2011-12-06 19:29:33
【问题描述】:

我是 jQuery 的绝对新手。我正在学习,但有一条圣诞节信息我需要立即启动并运行。

我已将这些包含在页面标题中:

<script type="text/javascript" src="scripts/jquery-1.7.min.js"></script>
<script type="text/javascript" src="scripts/jquery.cookies.2.2.0.min.js"></script>` 

然后使用 jQuery 弹出窗口跟随消息。这里是:

<script type="text/javascript">
$(document).ready(function() {  
        var id = '#dialog';

        //Get the screen height and width
        var maskHeight = $(document).height();
        var maskWidth = $(window).width();

        //Set height and width to mask to fill up the whole screen
        $('#mask').css({'width':maskWidth,'height':maskHeight});

        //transition effect     
        $('#mask').fadeIn(1000);    
        $('#mask').fadeTo("slow",0.7);  

        //Get the window height and width
        var winH = $(window).height();
        var winW = $(window).width();

        //Set the popup window to center
        $(id).css('top',  winH/2-$(id).height()/2);
        $(id).css('left', winW/2-$(id).width()/2-220);

        //transition effect
        $(id).fadeIn(2000);     

    //if close button is clicked
    $('.window .close').click(function (e) {
        //Cancel the link behavior
        e.preventDefault();

        $('#mask').hide();
        $('.window').hide();
    });     

    //if mask is clicked
    $('#mask').click(function () {
        $(this).hide();
        $('.window').hide();
    });     

});

</script>

body我已经把消息:

<div style="top: 199.5px; left: 200px; display: none;" id="dialog" class="window">  
XMAS MESSAGE
<a href="#" class="close">Shut this popup.</a>
</div>

到目前为止一切顺利。下一步是不要让我的回访者一遍又一遍地用同样的信息来厌烦(推迟六十天就足够了)。

所以我想用jQuery cookie插件设置一个cookie:

function setCookie() {
    $.cookie('test_status', '1', { path: '/', expires: 60 });
    return false;
}

然后在下次访问者点击同一页面时找到它,并且圣诞节消息在消息过期之前不会显示。

现在if-else 语句是我还不熟悉的高级jQuery。那么,谁能给我解释一下?

【问题讨论】:

  • 当您触发关闭事件时,运行 cookie 函数。然后在代码顶部检查 cookie 值。如果存在,则不显示模态。
  • jQuery 不是一种语言,它没有 if else 语句。这只是一堆javascript代码。 javascript 中的if-else 语句类似于conditional statements in any programming language

标签: jquery cookies if-statement popup


【解决方案1】:

这样的事情可能会有所帮助:

$(文档).ready(函数(){ if ($.cookie('test_status') != '1') { //这里显示弹窗 $.cookie('test_status', '1', { expires: 60}); } });

【讨论】:

【解决方案2】:

首先包含 jquery 库。

在 jquery 中包含以下 cookie 脚本之后。

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-cookie/1.4.1/jquery.cookie.min.js"></script>

现在将下面的代码放入页脚:

$(document).ready(function() {
       // initially popup is hidden:
        $('#stay-in-toch.popup-outer').hide();
        // Check for the "whenToShowDialog" cookie, if not found then show the dialog and save the cookie.
        // The cookie will expire and every 2 days and the dialog will show again.
        if ($.cookie('whenToShowDialog') == null) {
            // Create expiring cookie, 2 days from now:
            $.cookie('whenToShowDialog', 'yes', { expires: 2, path: '/' });

            // Show dialog
             $('#stay-in-toch.popup-outer').show();       
        }
    });

【讨论】:

【解决方案3】:

你可以试试这个

$(document).ready(function() {  
    if ($.cookie('test_status')) {
        return;
    }

    //Rest of your code here
});

【讨论】:

    【解决方案4】:

    我遇到了同样的问题,我找到了这个解决方案:

    $(document).ready(function () {
        var cookie = document.cookie;
        if (cookie == "") {
            //show popup depending on url
            var url = window.location;
            if (url != "http://localhost/test/jquery-popup.html") {                                    
                setTimeout(function () {
                    $.fn.colorbox({ html: '<div style="width:301px;height:194px;"><a href="http://livebook.in/"><img src="res/homer.jpg" style="width:301px;height:194px;" alt="The linked image" /></a></div>', open: true });
                }, 500);   
            }else {
                setTimeout(function () {
                    $.fn.colorbox({html:'...', open:true});
                }, 500);
            }
    
            //set timeout for closing the popup
            setTimeout(function () { $.fn.colorbox.close(); }, 3000);
    
            //set cookie
            var d = new Date();
            d.setTime(d.getTime() + (30 * 24 * 60 * 60 * 1000)); //expire in 30 days
            var expires = "expires=" + d.toGMTString();
            document.cookie = "apparsoYES" + "=" + "YES" + "; " + expires;    
        }
    });
    

    此脚本在页面加载时创建一个弹出窗口,自动关闭它,创建一个 cookie,以便该弹出窗口仅显示一次,并且可以根据页面显示不同的弹出窗口

    【讨论】:

    • 请注意 document.cookie 将返回所有 cookie 而不仅仅是您的 apparsoYES cookie
    【解决方案5】:

    我猜您正在寻找的是,当新用户访问您的Webpage 时,您会显示一个弹出窗口,但是当他浏览其他页面时,弹出窗口不应该出现。

    通过cookies很容易实现,查看此代码示例,这将对您有所帮助

    所以我包括了使用的代码 sn-p(你也可以按照下面的链接进行相同的操作)

    所以,脚本部分是

    var expDays = 1; // number of days the cookie should last
    
    var page = "only-popup-once.html";
    var windowprops = "width=300,height=200,location=no,toolbar=no,menubar=no,scrollbars=no,resizable=yes";
    
    function GetCookie (name) {
    var arg = name + "=";
    var alen = arg.length;
    var clen = document.cookie.length;
    var i = 0;
    while (i < clen) {
    var j = i + alen;
    if (document.cookie.substring(i, j) == arg)
    return getCookieVal (j);
    i = document.cookie.indexOf(" ", i) + 1;
    if (i == 0) break;
    }
    return null;
    }
    function SetCookie (name, value) {
    var argv = SetCookie.arguments;
    var argc = SetCookie.arguments.length;
    var expires = (argc > 2) ? argv[2] : null;
    var path = (argc > 3) ? argv[3] : null;
    var domain = (argc > 4) ? argv[4] : null;
    var secure = (argc > 5) ? argv[5] : false;
    document.cookie = name + "=" + escape (value) +
    ((expires == null) ? "" : ("; expires=" + expires.toGMTString())) +
    ((path == null) ? "" : ("; path=" + path)) +
    ((domain == null) ? "" : ("; domain=" + domain)) +
    ((secure == true) ? "; secure" : "");
    }
    function DeleteCookie (name) {
    var exp = new Date();
    exp.setTime (exp.getTime() - 1);
    var cval = GetCookie (name);
    document.cookie = name + "=" + cval + "; expires=" + exp.toGMTString();
    }
    var exp = new Date();
    exp.setTime(exp.getTime() + (expDays*24*60*60*1000));
    function amt(){
    var count = GetCookie('count')
    if(count == null) {
    SetCookie('count','1')
    return 1
    }
    else {
    var newcount = parseInt(count) + 1;
    DeleteCookie('count')
    SetCookie('count',newcount,exp)
    return count
       }
    }
    function getCookieVal(offset) {
    var endstr = document.cookie.indexOf (";", offset);
    if (endstr == -1)
    endstr = document.cookie.length;
    return unescape(document.cookie.substring(offset, endstr));
    }
    
    function checkCount() {
    var count = GetCookie('count');
    if (count == null) {
    count=1;
    SetCookie('count', count, exp);
    
    window.open(page, "", windowprops);
    
    }
    else {
    count++;
    SetCookie('count', count, exp);
       }
    }
    

    接下来是DOM的主体,

    <BODY OnLoad="checkCount()">
    

    http://www.jsmadeeasy.com/javascripts/Cookies/Only%20Popup%20Once/index.htm

    【讨论】:

      【解决方案6】:

      使用 js-cookie https://github.com/js-cookie/js-cookie

      和壮丽的弹出窗口 http://dimsemenov.com/plugins/magnific-popup/

      并受到其他答案的启发,我发布了这个答案,因为我花了很长时间才解决这个问题,所以可能会帮助其他人。如果有人想编辑和改进我的代码,请随意。

       <script type="text/javascript">
      function setCookie() {
          Cookies.set('test_status', '1', { expires: 1 })
          return false;
      }
      </script>
      
      <script type="text/javascript">//<![CDATA[
      $(document).ready(function(){
         if (Cookies.get('test_status') != '1') {
               setTimeout(function(){
          $.magnificPopup.open({
           items: {
                  src: '#message_popup' //ID OF INLINE ELEMENT
                      },
                  type:'inline',
            mainClass: 'mfp-zoom-out',
             closeBtnInside: true,
              fixedContentPos: true,
              removalDelay: 500,
                  });
           }, 3000);  // equals 50 seconds
          Cookies.set('test_status', '1', { expires: 1}); }
         });
        //]]>
      </script>
      
      <script type="text/javascript">
        function closePopup() {
        $.magnificPopup.close();
      }
      </script>
      
      //MY POP UP
      <div id="message_popup" class="white-popup mfp-hide typography">
      <button title="CLOSE" type="button" onClick="closePopup();">x</button>
        <div id="pop_inner">
         HELLO WORLD
        </div>
      </div>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-15
        相关资源
        最近更新 更多