Preserve toggle state using jQuery [duplicate]

北战南征 提交于 2019-12-04 13:28:44

Solution using cookie:

jQuery(document).ready(function() {
    jQuery(".toggle_container").toggle($.cookie('showTop') != 'collapsed');
    jQuery("div.question_trigger").click(function() {
        jQuery(this).toggleClass("active").next().toggle();
        var new_value = $(".toggle_container").is(":visible") ? 'expanded' : 'collapsed';
        $.cookie('showTop', new_value);
    });
});​

FIDDLE

Basic solution using PHP session variable to store the toggle state

Step 1 : Set the container visible or not durring page loading by checking the PHP session variable value :

jQuery(document).ready(function(){
    if(<?php echo (isset($_SESSION['userId']['toggleState'] && $_SESSION['userId']['toggleState'] === FALSE) ? 'true' : 'false'; ?>)
        $('.toggle_container').hide();
});

Step 2 : Add the script to update the PHP session variable

jQuery(document).ready(function(){
        jQuery(".toggle_container").hide();

        jQuery("div.question_trigger").click(function(){
            jQuery(this).toggleClass("active").next().toggle("slow");

            var data = ($(this).is(":visible")) ? 'true' : 'false';
            $.ajax({
              url: 'ajax/update.php',
              method : 'post',
              data : {data : data},
              success: function(data) {
                  console.log('data updated');
              },
              error: function (request, status, error) {
                  alert(request.responseText);
              }
            });
        });
});​

Step 3 : implement ajax/update.php code (use the real userId database value)

<?php
    $_SESSION['userId']['toggleState'] = (isset($_POST['data']) && $_POST['data'] === 'true') ? true : false;
?>
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!