Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 04.11.2016, 14:45
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,587

function str_rand() {
    var result = '', words = '1234567890qwertyuioplkjhgfdsazxcvbnm';
    for( var i = 0; i < 6; ++i ) {
        result += words.substr( Math.floor( Math.random() * words.length ), 1);
    }
    return result;
}

var value;
if(value = document.cookie.match(/(?:^|; )str_rand=([^;]*)/)){
    value = value[1];
}else{
    value = str_rand();
    document.cookie = 'str_rand=' + value + '; path=/; expires=Tue, 01 Feb 4000 11:11:11 GMT';        
}

if(confirm('Текущее значение: "' + value + '".\nОчистить?')){
    document.cookie = 'str_rand=; path=/; expires=Thu, 01 Feb 0001 11:11:11 GMT';  
}

Заодно исправил вашу функцию str_rand:
1. Отнимать у words.length единицу не нужно, потому что Math.random() никогда не равен единице, и с округлением вниз (Math.floor) максимально возможное значение и так будет на единицу меньше. В изначальной версии в result никогда бы не попала "m".
2. Перед i в цикле обязательно следует ставить var(let), как и пред любыми иными переменными в функции, иначе это может сломать что-нибудь внешнее.
3. Косметическое сокращение кода.
__________________
29375, 35

Последний раз редактировалось Aetae, 04.11.2016 в 14:51.
Ответить с цитированием
  #12 (permalink)  
Старый 04.11.2016, 15:01
Профессор
Отправить личное сообщение для smart-create Посмотреть профиль Найти все сообщения от smart-create
 
Регистрация: 25.10.2016
Сообщений: 157

рони,

Я прошу прощения за свое глухое не понимание, помогите пожалуйста разобраться нубу)

дописал я после своей функции ваш скрипт, что вышло и так понятно:
function str_rand() {
	var result       = '';
	var words        = '1234567890qwertyuioplkjhgfdsazxcvbnm';
	var max_position = words.length - 1;
		for( i = 0; i < 6; ++i ) {
			position = Math.floor ( Math.random() * max_position );
			result = result + words.substring(position, position + 1);
		}
		
	return result;
}

var result = localStorage.getItem('result') || str_rand(); 
localStorage.setItem('result ', result ); 
alert(result);


Но вопрос это не как не решает, да значение функции str_rand() записывается в localStorage, но только до обновления страницы, после обновления значение совершенно другое, потому что как только страница загрузилась функция str_rand() уже выполнила свое дело
Ответить с цитированием
  #13 (permalink)  
Старый 04.11.2016, 15:06
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,112

smart-create,
пробел уберите имени ключа в строке 14
localStorage.setItem('result', result );
Ответить с цитированием
  #14 (permalink)  
Старый 04.11.2016, 15:09
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,112

smart-create,
с вариантом str_rand от Aetae,
function str_rand() {
    var result = '', words = '1234567890qwertyuioplkjhgfdsazxcvbnm';
    for( var i = 0; i < 6; ++i ) {
        result += words.substr( Math.floor( Math.random() * words.length ), 1);
    }
    return result;
}
var result = localStorage.getItem('result') || str_rand();
localStorage.setItem('result', result );
alert(result);
Ответить с цитированием
  #15 (permalink)  
Старый 04.11.2016, 15:09
Профессор
Отправить личное сообщение для smart-create Посмотреть профиль Найти все сообщения от smart-create
 
Регистрация: 25.10.2016
Сообщений: 157

Всем спасибо за участие, отдельное спасибо Aetae.

Вопрос снят
Ответить с цитированием
  #16 (permalink)  
Старый 04.11.2016, 15:16
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,587

P.S.
function str_rand() {
    var result = '', words = '1234567890qwertyuioplkjhgfdsazxcvbnm';
    for( var i = 0; i < 6; ++i ) {
        result += words.charAt( Math.floor( Math.random() * words.length ) );
    }
    return result;
}
Инерция мышления.)
__________________
29375, 35
Ответить с цитированием
  #17 (permalink)  
Старый 04.11.2016, 15:29
Профессор
Отправить личное сообщение для smart-create Посмотреть профиль Найти все сообщения от smart-create
 
Регистрация: 25.10.2016
Сообщений: 157

Aetae,
У меня вот тоже инерция мышления)

Я задал сам себе вопрос на которой не смог ответить. Что же все таки лучше использовать? Куки или локальные хранилища, как советовал рони, дайте пожалуйста совет)

Последний раз редактировалось smart-create, 04.11.2016 в 15:32.
Ответить с цитированием
  #18 (permalink)  
Старый 04.11.2016, 15:36
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,587

smart-create, всё. Для надёжности.
__________________
29375, 35
Ответить с цитированием
  #19 (permalink)  
Старый 04.11.2016, 15:58
Профессор
Отправить личное сообщение для smart-create Посмотреть профиль Найти все сообщения от smart-create
 
Регистрация: 25.10.2016
Сообщений: 157

Aetae,
Понял, спасибо большое! Еще позволю себе последнюю наглость и задам 2 вопроса связаных между собой вопроса)

1) Не подскажите как задать "время жизни" куки, на 2 дня с момента создания, вместо вот этого "expires=Thu, 01 Feb 0001 11:11:11 GMT";
2) И как задать время хранения значения моей переменной в локальном хранилище?

Я знаю что и сам могу найти ответы на эти вопросы, просто уверен что вы это и так уже знаете, а я сейчас потрачу кучу времени если начну гуглить)) Заранее спасибо
Ответить с цитированием
  #20 (permalink)  
Старый 04.11.2016, 16:03
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,112

smart-create,
var limit = 2 * 24 * 3600 * 1000; // 2 суток
var localStorageInitTime = localStorage.getItem('localStorageInitTime');
if (localStorageInitTime === null) {
    localStorage.setItem('localStorageInitTime', +new Date());
} else if(+new Date() - localStorageInitTime > limit){
    localStorage.clear();// localStorage.removeItem('result') 
    localStorage.setItem('localStorageInitTime', +new Date());
};
function str_rand() {
    var result = '', words = '1234567890qwertyuioplkjhgfdsazxcvbnm';
    for( var i = 0; i < 6; ++i ) {
        result += words.substr( Math.floor( Math.random() * words.length ), 1);
    }
    return result;
}
var result = localStorage.getItem('result') || str_rand();
localStorage.setItem('result', result );
alert(result);

Последний раз редактировалось рони, 04.11.2016 в 16:07.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сохранение значения переменной в куках или передача через ajax tvixa Элементы интерфейса 1 04.02.2016 07:57
Сохранение строки в переменной. Сравнение строк. serega_pte Events/DOM/Window 8 01.02.2016 13:29
Сохранение url адреса в переменной Paltusssss Общие вопросы Javascript 1 07.11.2013 20:38
Сохранение переменной для дальнейшего использования Eser Общие вопросы Javascript 9 28.06.2012 16:56
Сохранение на куках _M_ Элементы интерфейса 3 21.05.2012 17:37