Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Запись в cookie значения id (https://javascript.ru/forum/jquery/66198-zapis-v-cookie-znacheniya-id.html)

Warycooper 30.11.2016 15:04

Запись в cookie значения id
 
Есть два скрипта и кнопка которые меняют фон в заданном месте <div id="col">ТЕКСТ</div>

/* МЕНЯЕТ ФОН СТАТЬИ ПРИ НАЖАТИИ НА КНОПКУ */
window.onload = function() {
    document.getElementById('SuperButton').onclick = function()
    {
        if(document.getElementById('col').className != 'whitefon')
        {
            document.getElementById('col').className = 'whitefon';
        }
        else
        {
            document.getElementById('col').className = 'topic-content';
        }
    }
}

/* КНОПКА МЕНЯЮЩАЯ ФОН И САМУ СЕБЯ */
$(function(){
  $('.button1, .button2').click(function(){
    $('.button1, .button2').toggleClass('active');
  });
});


И сама кнопка, которая не только меняет фон в id=col, но и меняет текст и цвет при нажатии.

<div id="SuperButton" class="exemple">
<span class="button1 active">сделать белый фон</span>
<span class="button2">сделать тёмный фон</span>
</div>


Код:

.exemple {
 float: right;
 }
 
.imgEx1, .imgEx2 {
 display: none;
 }
 
/* КНОПКА ПЕРЕКЛЮЧЕНИЯ ФОНА */
.button1 {
 display: none;
 width: 160px;
 color: #000000;
 cursor: pointer;
 background: #ffffff;
 font-style: 8px;
 text-align: center;
 padding: 0px 0px 0px 0px;
 }
       
.button2 {
 display: none;
 width: 160px;
 color: #fff;
 cursor: pointer;
 background: #000000;
 font-style: 8px;
 text-align: center;
 padding: 0px 0px 0px 0px;
 }
 
.button1:hover, .button2:hover {
 opacity: 0.8;
 }
 
.active {
 display: block;
 }
 
/* ПЕРЕКЛЮЧАЕМЫЙ ФОН */
.whitefon {
 font-size: 14px;
 background-color: #ffffff;
 color: #000000;
 font-family: Verdana, "Helvetica Neue", Helvetica, Arial, sans-serif;
 line-height: 15pt;
 text-align: justify;
 padding: 10px 10px 10px;
 box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.02);
 }

Я не силён в программировании, только учусь, но уже голову сломал. Подскажите пожалуйста, как мне всё это записать в cookie? Что бы при одном клике по кнопке производилась запись в cookie, а при повторном удалялось.

ksa 30.11.2016 16:36

Цитата:

Сообщение от Warycooper
производилась запись в cookie

Вот хорошая статейка...
https://learn.javascript.ru/cookie
Там даже даны примеры функций для более простой работы с куками. ;)
Цитата:

Сообщение от Warycooper
при повторном удалялось

Как такового удаления кук из JS нет...
Можно записать "пусто". Или записать некое значение на ооочень короткий интервал хранения и по истечении этого времени кука "умрет"...
В статейке выше есть пример функции deleteCookie()...

laimas 30.11.2016 19:27

Цитата:

Сообщение от ksa
Как такового удаления кук из JS нет...

cookie-запись можно удалить прежде, чем истечет срок ее службы, для этого нужно установить для данной записи новый срок, уже прошедший относительно текущего времени и даты.

Warycooper 30.11.2016 20:08

Если зменять на пустое значение, то при повторном нажатии просто удалит класс whitefon? А какую часть кода записывать?

ksa 01.12.2016 09:20

Цитата:

Сообщение от laimas
cookie-запись можно удалить прежде, чем истечет срок ее службы, для этого нужно установить для данной записи новый срок, уже прошедший относительно текущего времени и даты.

Не умер Данила, а яром придавило...
Цитата:

Сообщение от ksa
Или записать некое значение на ооочень короткий интервал хранения и по истечении этого времени кука "умрет"...


laimas 01.12.2016 11:04

Не очень короткий, а меньше, зачем жизнь продлевать зря )

ksa 01.12.2016 11:37

laimas, я так же писал
Цитата:

Сообщение от ksa
В статейке выше есть пример функции deleteCookie()...


laimas 01.12.2016 14:12

Цитата:

Сообщение от ksa
я так же писал

Да?!! Ну значит я еврей :D

Warycooper 01.12.2016 14:40

Я по примерм и пробовал, но у меня перестаёт работать скрипт вообще.

ksa 01.12.2016 14:42

Цитата:

Сообщение от Warycooper
у меня перестаёт работать скрипт вообще

Значит пора делать тестовый пример! :D

Warycooper 01.12.2016 20:38

function getCookie(name) {
var matches = document.cookie.match(new RegExp(
"(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"
));
return matches ? decodeURIComponent(matches[1]) : undefined;
}
$(function(){

var yourcolor = getCookie('color');
if(yourcolor){
if(yourcolor=="button1"){

} else if(yourcolor=="button2"){
$('.button1').removeClass('active');
$('.button2').addClass('active');
}
}
$('.button1, .button2').click(function(){
$('.button1, .button2').toggleClass('active');
if($('.button1').hasClass('active')){
var date = new Date(new Date().getTime() + 60 * 1000);
document.cookie = "color=button1; path=/; expires=" + date.toUTCString();
} else if($('.button2').hasClass('active')){
var date = new Date(new Date().getTime() + 60 * 1000);
document.cookie = "color=button2; path=/; expires=" + date.toUTCString();
}
});
});


Вот, но не работает.

Warycooper 02.12.2016 06:07

window.onload = function() {
		    document.getElementById('SuperButton').onclick = function()
		    {
		        if(document.getElementById('col').className != 'whitefon')
		        {
		            document.getElementById('col').className = 'whitefon';
		        }
		        else
		        {
		            document.getElementById('col').className = 'topic-content';
		        }
		    }
		}
		function getCookie(name) {
		  var matches = document.cookie.match(new RegExp(
		    "(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"
		  ));
		  return matches ? decodeURIComponent(matches[1]) : undefined;
		}
		$(function(){
			
			var yourcolor = getCookie('color');
			// alert(1);
			if(yourcolor){
				if(yourcolor=="button1"){

				} else if(yourcolor=="button2"){
					$('.button1').removeClass('active');
					$('.button2').addClass('active');
				}
			}
		$('.button1, .button2').click(function(){
		    $('.button1, .button2').toggleClass('active');
		    if($('.button1').hasClass('active')){
		    	var date = new Date(new Date().getTime() + 60 * 1000);
				document.cookie = "color=button1; path=/; expires=" + date.toUTCString();
		    } else if($('.button2').hasClass('active')){
		    	var date = new Date(new Date().getTime() + 60 * 1000);
				document.cookie = "color=button2; path=/; expires=" + date.toUTCString();
		    }
		  });
		});


Точнее записывает фон кнопки, а фон самого текста .whitefon нет.

ksa 02.12.2016 08:22

Цитата:

Сообщение от Warycooper
Вот, но не работает.

Примеры нужно делать полные... Огрызки оставь себе.

Warycooper 02.12.2016 09:30

http://codepen.io/warycooper/pen/yVpxNL - Вот здесь полный пример

ksa 02.12.2016 09:43

Цитата:

Сообщение от Warycooper
http://codepen.io/warycooper/pen/yVpxNL - Вот здесь полный пример

Капец у тебя говнокод... :blink:

Если я правильно понял, нужно мочь кнопками менять фон и при перезагрузке последний фон должен оставаться?

Warycooper 02.12.2016 09:52

Цитата:

Сообщение от ksa (Сообщение 436848)
Капец у тебя говнокод... :blink:

Если я правильно понял, нужно мочь кнопками менять фон и при перезагрузке последний фон должен оставаться?

Именно этого я и хочу добиться.

ksa 02.12.2016 10:54

Цитата:

Сообщение от Warycooper
Именно этого я и хочу добиться

Тогда кода через чур много...

<!DOCTYPE html>
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251' />
<script src='http://code.jquery.com/jquery-latest.js'></script>
<!--
<script src="https://code.angularjs.org/1.3.9/angular.min.js"></script>
<script src="https://code.angularjs.org/1.3.9/angular-route.js"></script>
-->
<style type='text/css'>
</style>
<script type='text/javascript'>
$(function(){
	var clr=getCookie('color');
	if (clr) {
		$('#test').css('background-color',clr);
	};
	$('#btn1').click(function(){
		var clr='#ffffff';
		$('#test').css('background-color',clr);
		setCookie('color',clr);
	});
	$('#btn2').click(function(){
		var clr='red';
		$('#test').css('background-color',clr);
		setCookie('color',clr);
	});
});
function getCookie(name) {
	var matches = document.cookie.match(new RegExp(
		"(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"
	));
	return matches ? decodeURIComponent(matches[1]) : undefined;
};
function setCookie(name, value, options) {
	options = options || {};
	var expires = options.expires;
	if (typeof expires == "number" && expires) {
		var d = new Date();
		d.setTime(d.getTime() + expires * 1000);
		expires = options.expires = d;
	};
	if (expires && expires.toUTCString) {
		options.expires = expires.toUTCString();
	};
	value = encodeURIComponent(value);
	var updatedCookie = name + "=" + value;
	for (var propName in options) {
		updatedCookie += "; " + propName;
		var propValue = options[propName];
		if (propValue !== true) {
			updatedCookie += "=" + propValue;
		}
	};
	document.cookie = updatedCookie;
}
</script>
</head>
<body>
<div>
	<button id="btn1">сделать белый фон</button>
	<button id="btn2">сделать тёмный фон</button>
</div>
<div id="test">Здесь меняет фон текста</div>
</body>
</html>

Warycooper 02.12.2016 13:02

Спасибо за помощь! А как записать, что бы цвет текста тоже менялся?

ksa 02.12.2016 14:07

Цитата:

Сообщение от Warycooper
А как записать, что бы цвет текста тоже менялся?

Ответ очевиден - аналогично!

WadimS 08.12.2016 14:11

Для работы с куками есть замечательный плагин jquey.cookie
В нем есть и полное удаление установленных кук

Описание и плагин: https://github.com/carhartl/jquery-cookie


Часовой пояс GMT +3, время: 14:26.