【问题标题】:Set cookie to hide div when button is clicked单击按钮时设置cookie隐藏div
【发布时间】:2014-08-02 06:36:00
【问题描述】:

我正在尝试显示默认显示的 div(包含条款和条件),除非将 cookie 设置为隐藏它。

我已将我的代码添加到 JSFiddle

任何想法为什么我的代码不起作用?

JavaScript

    function TermsAndConditions(){
   days=30;
   myDate = new Date();
   myDate.setTime(myDate.getTime()+(days*24*60*60*1000));
   document.cookie = 'TermsAndConditions=Accepted; expires=' + myDate.toGMTString();
}
if ($.cookie("TermsAndConditions") !== Accepted)
{
    $("#terms-and-conditions").hide();
} 

HTML

  <h1>Terms and Conditions</h1>
    <p>Example Content</p>

  <span class="accept-button"><a href="#" onclick="TermsAndConditions()">Accept</a></span></div

>

【问题讨论】:

    标签: javascript jquery html cookies


    【解决方案1】:

    您的脚本发生了很多事情。

    Mark 让你走上了正确的道路:不引用 Accepted 不会让 JavaScript 开心;字符串文字必须有引号。

    其次,您的 jsFiddle 没有链接 jQuery。在屏幕左侧的“Frameworks & Extensions”下,确保您选择了 jQuery 版本。

    第三,jQuery 没有内置的$.cookie 方法;有提供该功能的扩展,但它不是默认的 jQuery。如果您使用的是 jQuery 插件,您不会也使用它来设置 cookie 吗?相反,您使用本机浏览器扩展来设置 cookie。

    第四,由于 jsFiddle 的工作方式,您不能在没有一些技巧的情况下从 HTML 中调用 JavaScript 方法。最好在 JavaScript 中附加适当的功能。

    所以,要获取您的 cookie,您可以这样做:

    var cookie = document.cookie.split(';')
        .map(function(x){ return x.trim().split('='); })
        .filter(function(x){ return x[0]==='TermsAndConditions'; })
        .pop();
    

    如果 cookie 存在,它将是一个键/值数组。然后您可以检查以确保它存在并包含您要查找的值:

    if(cookie && cookie[1]==='Accepted') {
        $("#terms-and-conditions").hide();
    }
    

    然后我们将点击功能从 HTML 移到 JavaScript 中:

    $('.accept-button a').on('click', function(){
        TermsAndConditions();
        return false;
    }); 
    

    这是一个适合你的 jsFiddle:http://jsfiddle.net/3d928/1/

    请注意,在您的原始示例中,当用户单击链接时,您并没有隐藏 #terms-and-conditions 元素;你所做的只是设置cookie。所以在用户重新加载页面之前它不会被隐藏。如果你想两者都做,只需在点击处理程序中隐藏元素:

    $('.accept-button a').on('click', function(){
        TermsAndConditions();                   // set cookie
        $("#terms-and-conditions").hide();      // hide element
        return false;
    }); 
    

    【讨论】:

    • 感谢您的回答,伊桑。这可能是我做错了,但似乎没有一个 jsFiddles 对我有用。如果我单击“接受”,则不会隐藏 div。
    • 根据您的原始示例,这是因为点击处理程序实际上并未隐藏元素。您所做的只是设置 cookie:用户必须重新加载页面才能看到结果。这是一个简单的解决方法......我相应地更新了我的答案。
    【解决方案2】:

    有几点需要考虑:

    1. 您应该在if 语句中为Accepted 加上引号。
    2. 您应该使用=== 比较,而不是!==

    【讨论】:

      【解决方案3】:

      看看这个:http://jsfiddle.net/bochzchan/fkFSZ/

      function TermsAndConditions(){       
         days=30;
         myDate = new Date();
         myDate.setTime(myDate.getTime()+(days*24*60*60*1000));    
         document.cookie = 'TermsAndConditions=Accepted; expires=' + myDate.toGMTString();     
      }
      
      function CheckCookies(){   
          if ($.cookie("TermsAndConditions") === "Accepted")
          {
              $("#terms-and-conditions").hide();
          } 
      }
      

      也许你忘记包含 jquery cookie js

      <script src="http://cdnjs.cloudflare.com/ajax/libs/jquery-cookie/1.4.1/jquery.cookie.js"></script>
      <div id="terms-and-conditions">
          <h1>Terms and Conditions</h1>
          <p>Example Content</p>  
          <span class="accept-button"><a href="#" onclick="TermsAndConditions()">Accept</a></span>    
      </div>
      <a href="#" onclick="CheckCookies()">Check</a>
      

      【讨论】:

      • 感谢Cocococo先生的回答。这可能是我做错了,但没有一个 jsFiddles 似乎对我有用。如果我单击“接受”,则不会隐藏 div。
      • 点击“接受”后,重新加载页面。当用户单击按钮时,您没有任何隐藏内容的东西。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-21
      • 2013-01-16
      • 2013-04-05
      • 1970-01-01
      • 1970-01-01
      • 2021-06-14
      相关资源
      最近更新 更多