Chvalov
@Chvalov

Показать/Скрыть блок с сохранением в куки, проблема с пробелами?

Есть вод такой скрипт:
<script>
function _setCookie(name, value, expires, path, domain, secure) {
  document.cookie = name + "=" + escape(value) +
    ((expires) ? "; expires=" + expires : "") +
    ((path) ? "; path=" + path : "") +
    ((domain) ? "; domain=" + domain : "") +
    ((secure) ? "; secure" : "");
}
 
function show_hide(num_id) {
var divstyle = new String();
    divstyle = document.getElementById(num_id).style.display;
        if (divstyle.toLowerCase() == "none" || divstyle == "") {
            document.getElementById(num_id).style.display="block";
            var date = new Date( new Date().getTime() + 1000*60*60*24*365); // ставим куку на 365 дней
            _setCookie(num_id, escape("block"), date.toUTCString(), "/");
        } else {
            document.getElementById(num_id).style.display="none";
            var date = new Date( new Date().getTime() + 1000*60*60*24*365); // ставим куку на 365 дней
            _setCookie(num_id, escape("none"), date.toUTCString(), "/");
        }
}
</script>
 
<div onclick="show_hide('block_1');">click</div>
<div id="block_1" style="display:<?=isset($_COOKIE['block_1'])? $_COOKIE['block_1'] : 'none'; ?>">content 1 по умолчанию скрыт</div>
<br />
<div onclick="show_hide('block_2');">click</div>
<div id="block_2" style="display:<?=isset($_COOKIE['block_2'])? $_COOKIE['block_2'] : 'none'; ?>">content 2 по умолчанию скрыт</div>
<br />
<div onclick="show_hide('block_3');">click</div>
<div id="block_3" style="display:<?=isset($_COOKIE['block_3'])? $_COOKIE['block_3'] : 'block'; ?>">content 3 по умолчанию показан</div>
<br />
<div onclick="show_hide('block_4');">click</div>
<div id="block_4" style="display:<?=isset($_COOKIE['block_4'])? $_COOKIE['block_4'] : 'block'; ?>">content 4 по умолчанию показан</div>


Начал переделывать под свои нужны чтобы не только скрывать блоки, но и менять иконку на кнопке для возврата блока обратно, но столкнулся с двумя проблемами:
1) Как нормально передать класс, а не стиль я так и не понял, оно всего лишь возвращает один раз и то не верно: glyphicon%20glyphicon-minus
Кусок кода:
<span id="span_pm" class="<?=isset($_COOKIE['span_pm'])? $_COOKIE['span_pm'] : 'glyphicon glyphicon-minus'; ?>" ></span>

2) Я не уверен что я правильно делаю это для смены класса, потому что если даже прописать название класса без пробела, оно возвращает один раз, при этом при нажатии но кнопку сам класс не меняется, но блок при этом скрывается
  • Вопрос задан
  • 577 просмотров
Решения вопроса 1
Stalker_RED
@Stalker_RED
%20 это закодированный пробел. Появляется из-за использования escape().

возвращает один раз, при этом при нажатии но кнопку сам класс не меняется

Где что возвращается? Что вы имеете в виду?
Класс не меняется, да. В этом скрипте нет даже попыток менять какой-то класс.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
alex-saratov
@alex-saratov
Я стараюсь не засорять cookie. Поэтому использую одну переменную (массив настроек).

Преобразую его значения для сохранения
JSON.stringify(data)
распаковываю так
JSON.parse( Сохраненные данные )

Достоинство - можно обратиться один раз, при инициализации скриптов. Дальнейшие обращения к массиву в памяти.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы