Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.08.2019, 21:54
Интересующийся
Отправить личное сообщение для АндрейD Посмотреть профиль Найти все сообщения от АндрейD
 
Регистрация: 21.05.2018
Сообщений: 27

Не сохраняются cookie
Не могу разобраться, почему cookie работают только в сессии и не сохраняются после закрытия браузера?
<body>
		<p>Фамилия</p>
		<input type="text" value="" id="surname">
		<p>Имя</p>
		<input type="text" value="" id="name">
		<p>Отчество</p>
		<input type="text" value="" id="parent">
	</body>

var inp = document.querySelectorAll('input');
document.addEventListener('input', setCookie);
function setCookie() {
	var date = new Date();
	date.setDate(date.getDate() + 1);
	date = date.toGMTString();	// toUTCString - пробовал
	for(var i = 0; i < inp.length; i++) {
		document.cookie = inp[i].getAttribute('id') + "=" + inp[i].value + "; expires=" + date + '; path=/';
	}
}

getCookie();
function getCookie() {
	var cook = decodeURIComponent(document.cookie);
	var arr = cook.split(';');
	for(var i = 0; i < arr.length; i++) {
		var [k, v] = arr[i].split('=');    // k - ключ cookie; v - значение cookie
		if(k == inp[i].getAttribute('id')) {
			inp[i].value = v;
		}
	}	
}
Ответить с цитированием
  #2 (permalink)  
Старый 22.08.2019, 07:39
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,118

Сообщение от АндрейD
var [k, v] = arr[i].split('=');
Это что за конструкция?
Ответить с цитированием
  #3 (permalink)  
Старый 22.08.2019, 08:16
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

ksa,
Деструктурирующее присваивание
Ответить с цитированием
  #4 (permalink)  
Старый 22.08.2019, 08:28
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,118

У меня такое показывает как ошибку...
Но это "спец.редактор" и он про такое не знает как и я.

АндрейD, вот работающий вариант...
<!DOCTYPE html>
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251' />
<!--
<script src='https://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'>
</script>
</head>
<body>
<p>Фамилия</p>
<input type="text" value="" id="surname">
<p>Имя</p>
<input type="text" value="" id="name">
<p>Отчество</p>
<input type="text" value="" id="parent">
<script type='text/javascript'>
document.addEventListener('input', setCookie);
getCookie();
function setCookie() {
	var date = new Date();
	var inp = document.querySelectorAll('input');
	date.setDate(date.getDate() + 1);
	date = date.toGMTString();	
	for(var i = 0; i < inp.length; i++) {
		document.cookie = inp[i].id + "=" + inp[i].value + "; expires=" + date + '; path=/';
	};
};
function getCookie() {
	var arr = document.cookie.split('; ');
	for(var i = 0; i < arr.length; i++) {
		var v = arr[i].split('=');    
		var k=v[0];
		v=v[1];
		var o=document.getElementById(k);
		if(o) {
			o.value = v;
		};
	};
};
</script>
</body>
</html>

Ищи различия...

Последний раз редактировалось ksa, 22.08.2019 в 08:34.
Ответить с цитированием
  #5 (permalink)  
Старый 22.08.2019, 23:15
Интересующийся
Отправить личное сообщение для АндрейD Посмотреть профиль Найти все сообщения от АндрейD
 
Регистрация: 21.05.2018
Сообщений: 27

Сообщение от ksa
У меня такое показывает как ошибку...
Но это "спец.редактор" и он про такое не знает как и я.
У меня Notepad++ Ошибок нет.
Ответить с цитированием
  #6 (permalink)  
Старый 22.08.2019, 23:19
Интересующийся
Отправить личное сообщение для АндрейD Посмотреть профиль Найти все сообщения от АндрейD
 
Регистрация: 21.05.2018
Сообщений: 27

Сообщение от ksa
Ищи различия...
Спасибо за помощь! Однако, в вашем коде cookie тоже работают только в сессии. К тому же браузер ругается на 40 строку: "Пустая строка не может быть аргументом метода getElementById()."

Так что пока не решено. Жду помощи.
Ответить с цитированием
  #7 (permalink)  
Старый 23.08.2019, 01:45
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

АндрейD,
куки могут не работать, если протокол в адресной строке file://, а не http://, т.е. нужно эмулировать сайт.
Ответить с цитированием
  #8 (permalink)  
Старый 23.08.2019, 07:20
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,118

Сообщение от АндрейD
Однако, в вашем коде ...
Это полностью работающий код.
Ответить с цитированием
  #9 (permalink)  
Старый 23.08.2019, 09:34
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

АндрейD, вы можете для хранения своей печеньки использовать локальное хранилище. Я понимаю, что вы хотите, чтобы то, что вводит пользователь сохранялось. Для этой цели как раз подходит локальное хранилище! Вот ваш пример, который я изменил...
<p>Фамилия</p>
<input id="surname">
<p>Имя</p>
<input id="name">
<p>Отчество</p>
<input id="parent">

<script>
	var inp = document.querySelectorAll("input");
	document.addEventListener("input", setCookie);

	function setCookie() {
		var cookie = [];
		for(var i = 0; i < inp.length; i++) {
			cookie.push({
				id: inp[i].id,
				value: inp[i].value
			});
		}
		localStorage.cookie = JSON.stringify(cookie);
	}
	(function getCookie() {
		var cookie = JSON.parse(localStorage.cookie || "[]");
		for (var i = 0; i < cookie.length; i++) {
			var input = document.getElementById(cookie[i].id);
			if(input) input.value = cookie[i].value;
		}
	})();
</script>


АндрейD, вы поняли, что поменял в вашем коде ksa в посте №4? А то он утверждает, что у него полностью работающий код, а на деле получается, что он просто взял и добавил в начале бессмысленный комментарий к вашему коду и ещё в конце деструктуризацию руками раскрыл (типо человек-Бабель)... Я не понял, зачем нужны такие различия, не несущие никакой практической пользы!
Ответить с цитированием
  #10 (permalink)  
Старый 23.08.2019, 10:20
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,118

Сообщение от Malleys
а на деле получается ...
Я пытался максимально сохранить идею автора.
Дабы он увидел, что он делал не так.

Для работы с куками больше подходят вот такие функции
https://ruseller.com/lessons.php?id=593
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Cookies для кнопки Х stem Общие вопросы Javascript 23 31.03.2016 12:40
Не сохраняет стиль страницы в cookie sana Events/DOM/Window 3 24.04.2015 12:02
Неправильно работает кнопка Нияз Элементы интерфейса 23 07.04.2015 10:56
проверка отсутствия записей в cookie legrol Общие вопросы Javascript 2 18.08.2012 19:27
Корзина на JS с использованием COOKIE vah-smile Элементы интерфейса 3 05.03.2011 16:37