Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Сохранять значение select (https://javascript.ru/forum/misc/38374-sokhranyat-znachenie-select.html)

djonA 29.05.2013 22:08

Сохранять значение select
 
Есть выпадающий список:

<select onchange="window.location=this.value">
 <option>выберите поле</option>
 <option value="/test1">1</option>
 <option value="/test2">2</option>
 <option value="/test3">3</option>
</select>


Подскажите как сохранять определенные значение выбранного поля, при переходе на страницу /test1, или /test2, или /test3

Т.е выбираю скажем 1, выполняю переход на страницу: site.ru/test1

И там уже у меня сразу в списке стоит selected поле 1: <option selected="selected" value="/test1">1</option>

Bandicoot 29.05.2013 22:10

Как вариант можно использовать куки, я так думаю

bes 29.05.2013 22:26

передать с хешем или параметром

djonA 29.05.2013 22:35

А можно пример, или где можно про это почитать

bes 29.05.2013 22:38

с хешем примерно так
<body onload="sel.selectedIndex = location.hash.replace('#', '')">
<select id="sel" onchange="window.location=this.value + '#' + this.selectedIndex">

с параметром чуть по-другому ?my_param=my_value
см. location

PS: и в ненавязчивом стиле

djonA 29.05.2013 22:42

А можно повесить onload не на body, а скажем на div.

Вот так:
<div onload="sel.selectedIndex = location.hash.replace('#', '')">
<select id="sel" onchange="window.location=this.value + '#' + this.selectedIndex">
	 <option>выберите поле</option>
	 <option value="/test1">1</option>
	 <option value="/test2">2</option>
	 <option value="/test3">3</option>
	</select>
</div>

bes 29.05.2013 22:50

Цитата:

Сообщение от djonA
А можно повесить onload не на body, а скажем на div.

всегда можно проверить ;)

зачем тебе это?

djonA 29.05.2013 22:52

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

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

bes 29.05.2013 22:56

и причём тут вешать событие загрузки документа (или картинки и некоторых других) на div

djonA 29.05.2013 22:59

не разобрался я что то.

Не понял как сохранять выбранное значение при переходе по ссылке выбранного селекта.

bes 29.05.2013 23:08

http://javascript.ru/window-location
я добавил в hash позицию (номер) выбранного пункта, при загрузке взял из этого хеша этот номер и использовал его для установки списка в эту позицию

djonA 29.05.2013 23:15

Сделал как Вы писали:
<select id="sel" onchange="window.location=this.value + '#' + this.selectedIndex">
<option value="/test1">1</option>
<option value="/test2">2</option>
<option value="/test3">3</option>
</select>


Теперь в конце добавляет #1 или #2 или #3

А как теперь в зависимости от #1 или #2 или #3 выбирать активный селект?
Если выбрал селект 3, что бы при переходе на страницу активным был
<option selected="selected" value="/test3">3</option>

bes 29.05.2013 23:17

я сделал это в onload

djonA 29.05.2013 23:25

Все теперь понял.

Только получается специфика сайта что на body не могу повесить.

А можно повесить на другой элемент?

djonA 30.05.2013 01:15

В ie не работает этот вариант

djonA 30.05.2013 01:16

не сохраняет значение

edison 30.05.2013 05:23

Зачем вообще тут мучить js??? Если сервер и так знает на какую страницу перешел и с какими параметрами и уже там просто помечать нужный параметр.

ANAGAMA 30.05.2013 18:03

Цитата:

Сообщение от djonA (Сообщение 253458)
Т.е выбираю скажем 1, выполняю переход на страницу: site.ru/test1 И там уже у меня сразу в списке стоит selected поле 1: <option selected="selected" value="/test1">1</option>

Подозреваю, что речь идет о заказе, который размещается на нескольки последовательных страницах.

Итак, начнем с конца и увидим начало :)

1. test1 получая какую то информацию выставляет нужный селект

2. Что бы он смог это сделать ему нужно сообщить, какой селект выставить ( сообщить можно, например, через командную строку или через куку)

3. и ты ды...

А теперь провокационный вопрос. Зачем пользователю этот селект на второй странице, если он уже сделал свой выбор?

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

bes 30.05.2013 21:02

Цитата:

Сообщение от djonA
В ie не работает этот вариант

у меня везде работает

<p>change me</p>
<select onchange="this.selectedIndex = 2">
	<option>0</option>
	<option>1</option>
	<option selected>2</option>
	<option>3</option>
	<option>4</option>
</select>

<select onchange="this.options[3].selected = true">
	<option>0</option>
	<option>1</option>
	<option>2</option>
	<option selected>3</option>
	<option>4</option>
</select>


Цитата:

Сообщение от edison
Зачем вообще тут мучить js??? Если сервер и так знает на какую страницу перешел и с какими параметрами и уже там просто помечать нужный параметр.

видимо чтобы шаблон встал

лично мне по душе подтягивать всё ajax-запросами, про то как это индексируется информация есть

UPD: пару полезных ссылок
https://developer.mozilla.org/en-US/...LOptionElement
https://developer.mozilla.org/en-US/...LSelectElement

zOdmin 30.05.2013 21:45

Можно запоминать в localStorage.

<script>
//отладка
document.write("Для справки: "+(localStorage.seltag==undefined?"Вы здесь впервые":"Ранее Вы выбрали опцию "+localStorage.seltag));
</script><br>
<select id="seltag" onchange="localStorage.seltag=this.selectedIndex">
	    <option>0</option>
	    <option>1</option>
	    <option>2</option>
	    <option>3</option>
	    <option>4</option>
</select>
<script>
//восстанавливаем запомненное значение, если есть
if(localStorage.seltag!==undefined) seltag.selectedIndex = localStorage.seltag;
</script>


Если нужно запомнить только для текущей сессии, то соответственно sessionStorage вместо localStorage

edison 31.05.2013 01:29

Цитата:

Можно запоминать в localStorage.
Отсеяв тем самым половину юзеров )) Т.к. не везде он есть. Чтобы юзать локал сторадж придется писать функцию локал + глобал + куки, легче уж сразу куки ) Стораджи следует юзать там где они нужны, например в целях безопасности.


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