Используйте Jquery для обновления переменной сеанса PHP при нажатии на ссылку - PullRequest
3 голосов
/ 12 октября 2011

У меня есть несколько делений, которые пользователь может свернуть или развернуть с помощью метода переключения jquery.Тем не менее, когда страница обновляется, элементы Div возвращаются в состояние по умолчанию.Это способ, которым браузер запоминает последнее состояние div?

Например, если я расширяю div с идентификатором «my_div», затем нажимаю на что-то еще на странице, затем возвращаюсь на исходную страницу, я хочу, чтобы «my_div» оставался развернутым.

Я думал, что для этого можно будет использовать переменные сеанса, возможно, когда пользователь нажимает кнопку «развернуть / свернуть», можно отправить запрос AJAX и переключить переменную сеанса ... IDK..any идеи

Ответы [ 6 ]

2 голосов
/ 12 октября 2011

Нет необходимости в ajax-запросе, просто сохраните информацию в файле cookie или в локальном хранилище.Вот библиотека, которая должна вам помочь: http://www.jstorage.info/

Пример кода (не проверен):

// stores the toggled position
$('#my_div').click(function() {
    $('#my_div').toggle();
    $.jStorage.set('my_div', $('#my_div:visible').length);
});

// on page load restores all elements to old position
$(function() {
    var elems = $.jStorage.index();
    for (var i = 0, l = elems.length; i < l; i++) {
        $.jStorage.get(i) ? $('#' + i).show() : hide();
    }
});
1 голос
/ 12 октября 2011

Если вам не требуется поддержка старых браузеров, вы можете использовать html5 web storage .

Вы можете сделать что-то вроде этого (пример взят из w3schools):

В следующем примере показано, сколько раз пользователь посещал страница, в текущем сеансе:

<script type="text/javascript">
if (sessionStorage.pagecount) {
  sessionStorage.pagecount=Number(sessionStorage.pagecount) +1;
}
else {
  sessionStorage.pagecount=1;
}
document.write("Visits "+sessionStorage.pagecount+" time(s) this session.");
</script>
0 голосов
/ 24 октября 2011

Закончилось этим. Отличный учебник.

http://www.shopdev.co.uk/blog/cookies-with-jquery-designing-collapsible-layouts/

0 голосов
/ 13 октября 2011

Посмотрите на метод JavaScript Cookie, вы можете сохранить текущие состояния div и восстановить его, если пользователь вернется на сайт. Есть хороший плагин jQuery для обработки файлов cookie (http://plugins.jquery.com/project/Cookie)

Надеюсь, это поможет

0 голосов
/ 13 октября 2011

У меня было что-то вроде этого, и я использовал куки, основанные на том, какой пользователь вошел в систему, если вы хотите, чтобы только основной div не использовал

      $('#'+div_id).next().css('display','none');  

use

      $('#'+div_id).css('display','none'); 

* Вот код *

 //this is the div 
 <div id = "<?php echo $user; ?>1" onclick="setCookie(this.id)" ><div>My Content this will hide/show</div></div>


function setCookie(div_id)
   {
var value = ''; 
var x = document.getElementById(div_id); 
var x = $('#'+div_id).next().css('display'); 
if(x == 'none')
{
    value = 'block'; 
}
else
{
    value = 'none';
}
console.log(div_id+"="+value+"; expires=15/02/2012 00:00:00;path=/")
//alert(x); 
document.cookie = div_id+"="+value+"; expires=15/02/2012 00:00:00;path=/";

   }


    function getCookie(div_id)
    {
console.log( div_id ); 
  var i,x,y,ARRcookies=document.cookie.split(";");
for (i=0;i<ARRcookies.length;i++)
 {
  x=ARRcookies[i].substr(0,ARRcookies[i].indexOf("="));
  y=ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1);
  x=x.replace(/^\s+|\s+$/g,"");
if (x==div_id)
{
   return unescape(y);
   }
  }
}

 function set_status()
 {

var div_id = ''; 

for(var i = 1; i <= 9 ; i++)
{
    div_id = '<?php echo $user; ?>'+i; 


    if(getCookie(div_id) == 'none')
    {

        $('#'+div_id).next().css('display','none'); 
    }
    else if(getCookie(div_id) == 'block') 
    {
        $('#'+div_id).next().slideDown(); 
    }

}

}

$(document).ready(function(){
    get_status();
 });
0 голосов
/ 12 октября 2011

Другие уже дали действительные ответы, относящиеся к файлам cookie и API локального хранилища, но, основываясь на вашем комментарии к вопросу, вот как вы можете прикрепить обработчик события click к ссылке:

$("#someLinkId").click(function() {
    $.post("somewhere.php", function() {
        //Done!
    });
});

Функция обработчика событий будет запускаться при каждом нажатии на элемент, к которому она присоединена. Внутри обработчика событий вы можете запускать любой код, который вам нравится. В этом примере запрос POST запускается на somewhere.php.

...