Не запоминает localstorage
Всем добра, господа знатоки. Суть такова: Имеется код плеера с сериями вида:
<div class="block1"> <a onclick="vidLoc('url_video','1','0')">1</a> <a onclick="vidLoc('url_video','1','0')">2</a> <a onclick="vidLoc('url_video','1','0')">3</a> <a onclick="vidLoc('url_video','1','0')">4</a> </div> Имеется блок, содержащий id конкретной страницы: <div class="wrapper" id="id123"></div> И скрипт, который находит значение этого уникального id для каждой страницы и используется для запоминания состояния нажатой серии. $(function(){ var indxid = $(".wrapper:first").attr('id'); var a=$(".block1 > a"),indxid=localStorage.getItem("indxid"); a.on("click",function(){a.not($(this).addClass("eps")).removeClass("eps"); $(".eps").parent().css( "display", "block"); indxid=a.index(this); $(".nezapomn").removeClass("nezapomn").addClass("zapomn"); document.getElementById('zapominalka').innerHTML = "Забыть серию"; localStorage.setItem("indxid",indxid)}); indxid!==null&&a.eq(indxid).click(); }); Запоминалка работает, но не так как нужно: если на одной странице я выберу серию 1, то на другой странице тоже будет выбрана серия 1. Получается, что нет уникального ключа для localstorage, а как мне его тогда задать?! |
Но почему используется индекс набора, а не уникальный id?
|
Цитата:
Причём в таком виде всё работает как надо: $(function(){ var a=$(".block1 > a"),btn=$(".btn"),indx$ID$=localStorage.getItem("indx$ID$"); a.on("click",function(){a.not($(this).addClass("eps")).removeClass("eps"); $(".eps").parent().css( "display", "block"); indx=a.index(this); var indxid = $(".wrapper:first").attr('id'); localStorage.setItem("indx$ID$",indx)}); indx$ID$!==null&&a.eq(indx$ID$).click(); alert (indx$ID$) }); Где $ID$ - порядковый номер материала. Но мне нужно добавить код удалённо (<script src="url.js"></script>), а не на странице эту страсть хранить. И тут-то нашла коса на камень. |
Цитата:
localStorage["indx$ID$"] = this.id Или причем тут тогда уникальность? |
Пока писал, добавлено действительно по ID.
Цитата:
|
Цитата:
С помощью id страницы собиралась сделать уникальным ключ localstorage, чтобы для каждой страницы был свой ключ, со своим значением index. Не получается внешним файлом никак. |
Цитата:
|
Цитата:
|
Цитата:
$(function(){ var a=$(".block1 > a"),btn=$(".btn"),indx$ID$=localStorage.getItem("indx$ID$"); a.on("click",function(){a.not($(this).addClass("eps")).removeClass("eps"); $(".eps").parent().css( "display", "block"); indx=a.index(this); var indxid = $(".wrapper:first").attr('id'); localStorage.setItem("indxid",indx)}); indx$ID$!==null&&a.eq(indx$ID$).click(); }); А во внешнем файле нет: $(function(){ var mat = $(".wrapper:first").attr('id'); var a=$(".block1 > a"),btn=$(".btn"),indxid=localStorage.getItem("indx+mat"); a.on("click",function(){a.not($(this).addClass("eps")).removeClass("eps"); $(".eps").parent().css( "display", "block"); indxid=a.index(this); localStorage.setItem("indx+mat",indxid)}); indx+mat!==null&&a.eq(indx+mat).click(); }); |
Я не знаю что там за внешний файл, но если к каждой странице нужно соответствие своего выбора, то и плодить кучу ключей не надо, да привязать можно проще. Если
<div id="уникальный на каждой странице" class="block1"> то в хранилище нужно держать один объект, в котором будут храниться данные как id=>index. Естественно что при записи сохраняем его в JSON, а при получении получаем из него объект. |
в JSON - это как? Можно пример?
|
var _mem = localStorage; $(function() { var itm = $(".wrapper:first").attr('id'), btn = $(".btn"), idx = !!_mem['items'] && JSON.parse(_mem['items']) || {}, a = $(".block1 a").on("click", function() { a.not($(this).addClass("eps")).removeClass("eps"); $(".eps").parent().css( "display", "block"); idx[itm] = a.index(this); _mem['items'] = JSON.stringify(idx); }); if(idx) a.eq(idx[itm]).trigger('click'); }); |
Цитата:
И не могли бы Вы подсказать, как удалить запоминание на конкретной странице при клике по <button id="zapominalka">? Извиняюсь, но я правда ничего не понимаю в JSON, только начинаю вникать в эту тему. Своими силами уже весь день прошёл, можно сказать, впустую. |
Цитата:
Цитата:
$('#zapominalka').click(function() { delete idx[id]; //где id это ключ который надо удалить, //если речь о текущей странице //значит это будет ранее определенная переменная itm //если выбирать из набора страниц, значит надо передавать в это обработчик ключ старнцы //или ключи, если выбор из списка _mem['items'] = JSON.stringify(idx); }) |
Большое спасибо! После долгих мучений наконец-то получилось так, как нужно.
|
Цитата:
Вообще-то локальное хранилище не единственное у браузера, есть еще и сессионное. |
Цитата:
Впрочем, не уверена, что на каждый сайт 5мб, но кто-то такую информацию распространил. А про сессионные совсем ничего не слышала. |
Цитата:
Сессионное хранилище (sessionStorage) тоже самое за исключением того, что не зависит от домена и работает в приделах окна, то есть открыли окно - сессия, закрыли окно - сессия умерла. Для одной и той же страницы открытой в разных окнах/вкладках будет создаваться своя сессия. Поэтому если временно нужно, то лучше сессионное хранилище. Все методы работы с ним те же самые что и у локального хранилища. |
laimas, Спасибо за разъяснения. sessionStorage самое то использовать для запоминания в форме комментариев или на форуме. Надо взять на заметку.
|
Часовой пояс GMT +3, время: 10:16. |