求助:点击按钮给Cookie值加1,实现Bootstrap模态框仅显示3次
我看了你的代码,发现几个关键问题导致Cookie计数没正常工作,下面帮你修正并把逻辑理清楚:
你的代码里的核心问题
- Cookie名称不统一:一会儿读取
AcceptMyGift,一会儿写入AcceptMyGiftOnce,完全没法正确关联计数 - 数值类型问题:Cookie存储的是字符串,直接做
++运算会变成字符串拼接(比如"1"变成"11",不是2) - 逻辑判断偏差:你要限制最多显示3次,但代码里判断的是
<5,而且分支逻辑太冗余 - 模态框关闭处理冲突:Bootstrap的关闭按钮已经自带
data-dismiss="modal",额外加fadeOut会干扰组件自身的隐藏行为
修正后的完整代码
HTML部分(无需修改,保持你的结构即可)
<!-- Modal --> <div id="hereiakarneta" class="modal fade" role="dialog"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" id="AcceptMyGiftClose" data-dismiss="modal">×</button> <h4 class="modal-title" style="text-align: center;" >From Me To You</h4> </div> <div class="modal-body"> <div class="hikmywords"> <img src="" class="img-responsive" alt=""> <ul> <li><h5>my gift to you</h5></li> <li> <p>click on the button and download my gift</p> </li> </ul> </div> </div> <div class="modal-footer"> <p><a>My Gift</a></p> </div> </div> </div> </div>
jQuery部分(修正后)
jQuery(document).ready(function($) { // 读取Cookie,转成数字,默认0(如果没有Cookie的话) var closeCount = parseInt($.cookie('popupCloseCount')) || 0; // 如果关闭次数小于3,显示模态框 if (closeCount < 3) { $('#hereiakarneta').modal({ show: true, backdrop: 'static', keyboard: false }); // 绑定关闭按钮的点击事件 $("#AcceptMyGiftClose").on("click", function() { // 计数加1 closeCount++; // 更新Cookie,有效期30天,路径根目录(确保全站有效) $.cookie('popupCloseCount', closeCount, { expires: 30, path: '/' }); }); } });
代码逻辑说明
- 统一Cookie名称:用
popupCloseCount作为Cookie的唯一名称,确保读取和写入的是同一个值 - 类型转换:用
parseInt()把Cookie的值转成数字,避免字符串拼接的错误 - 简化逻辑:只需要判断关闭次数是否小于3,小于就显示模态框,不用分第一次和后续情况
- 正确处理模态框关闭:依赖Bootstrap自带的
data-dismiss="modal"隐藏模态框,只在点击时更新计数
这样修改后,用户每次关闭模态框都会增加计数,当计数达到3次后,再次加载页面就不会再显示这个模态框了。
内容的提问来源于stack exchange,提问作者Sh.Dehnavi
相关产品推荐
相关产品推荐

