【问题标题】:jQuery - Remember if a timed popup has been activated after page refreshjQuery - 记住页面刷新后是否激活了定时弹出窗口
【发布时间】:2013-03-01 19:32:01
【问题描述】:

我有一个带有弹出式覆盖的页面,其中包含一个表单,该表单会在 20 秒后自动出现,或者通过 div 上的单击操作显示。

我需要它来工作,以便在发送表单后刷新页面时,覆盖的计时器不会再次启动,因此如果单击覆盖的链接,计时器不会继续 -基本上我需要它记住它是否被触发,这样覆盖层只会被触发一次。

函数的jquery如下:

//popup button click function
  $('#popup_launcher').click(function(){
    $('#overlay').show(1000);
         $('html, body').animate({scrollTop:0}, 'slow');
      return false;
 });

 //close button click function
  $('#close').click(function(){
    $('#overlay').hide(1000);
 });

// popup timer function - change last value eg 20000 (20 seconds) to set time in milliseconds
        setTimeout(function() {  
                $('#overlay').show(1000);
                $('html, body').animate({scrollTop:0}, 'slow');
}, 20000);

这里正在开发页面(表单提交尚未激活): http://www.tjsmarketing.co.uk/testarea/newquotepage/mk2/template.php?id=75890701 谢谢你的帮助, 亚伦。

【问题讨论】:

    标签: jquery cookies state activation


    【解决方案1】:
    $('#popup_launcher').one('click', (function(){
        $('#overlay').show(1000);
        $('html, body').animate({scrollTop:0}, 'slow');
        return false;
    });
    

    这将只执行一次您的点击事件,然后自行删除。

    【讨论】:

    • .one() 只是用于单次执行然后未绑定的 .on() 事件,但我相信刷新页面只会重新初始化绑定。
    • @LifeInTheGrey 是的,它会重新初始化绑定,我错过了关于回发的部分。他可以在回发中包含一个新脚本,指示不进行绑定,并且可以跨浏览器工作。
    • 好电话......我要修改我的答案,说 IE7 - 写那个脚本。
    【解决方案2】:

    我会使用 sessionStorage。

    // on page load
    sessionStorage.overlay = 0;
    
    // on click
    sessionStorage.overlay = 1;
    
    // time triggers overlay
    sessionStorage.overlay = 2;
    

    检索:

    if(sessionStorage.overlay < 2){
        // load form magic
    }
    

    如果你愿意,你可以为 1 和 0 添加一些 if else 逻辑,我只是​​为了举例而保持简单。

    这将在所有刷新中保留。应该注意的是,这适用于 IE8+ 和所有真正的浏览器......如果你正在为 IE6 兼容性而拍摄,它不会成功。对于那些跛脚的人,您可以编写一个单独的脚本来检测回发。检测浏览器支持:

    if(window.sessionStorage){
        // do the above code
    } else {
        // reference postback script
    }
    

    这应该涵盖所有人。

    【讨论】:

    • 感谢大家的反馈 - 我无法让 sessionStorage 方法正常工作,以便在单击链接时禁用计时器,如果计时器已触发覆盖,则在刷新时禁用?跨度>
    • 更新了我的答案,展示了一种简单的方法来验证两者都发生了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-01
    • 2012-06-03
    • 2016-12-19
    • 1970-01-01
    • 2012-12-31
    • 1970-01-01
    相关资源
    最近更新 更多