файл cookie для запоминания выбранного выпадающего списка - PullRequest
0 голосов
/ 05 января 2012

Как использовать функцию cookie для документа, чтобы браузер запоминал выбранное пользователем выпадающее меню после обновления страницы?При изменении выбора браузер обновляется, добавляя дополнительный параметр к URL-адресу, но восстанавливает раскрывающийся параметр по умолчанию вместо выбранного пользователем ..

<select id="MyDropDown" onchange="document.cookie=this.selectedIndex; window.open(this.options[this.selectedIndex].value,'_top')">
    <option value="http://mysite.com/default1.aspx?alpha=A">A</option>
      <option value="http://mysite.com/default1.aspx?alpha=B">B</option>
      <option value="http://mysite.com/default1.aspx?alpha=C">C</option>
    </select>

Ответы [ 4 ]

1 голос
/ 27 июня 2016

Ответ от bebonham сработал, но только для 9 вариантов в раскрывающемся списке. Я настроил его так, чтобы он работал для более длинных выпадающих списков.

<html>
<body>
<select id="MyDropDown" onchange="document.cookie= 'myDDIdx = ' + this.selectedIndex + '; path=/;'; window.open(this.options[this.selectedIndex].value,'_top')">
<option value="http://example.com/default1.aspx?alpha=A">A</option>
<option value="http://example.com/default1.aspx?alpha=B">B</option>
<option value="http://example.com/default1.aspx?alpha=C">C</option>
</select>

<SCRIPT>
function readCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
    var c = ca[i];
    while (c.charAt(0)==' ') c = c.substring(1,c.length);
    if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return null;
}


window.onload = function () { document.getElementById("MyDropDown").selectedIndex = readCookie("myDDIdx"); } 
</SCRIPT>
</body>
0 голосов
/ 05 января 2012

Используйте jQuery (или простой старый JavaScript), чтобы вставить новый элемент select. Создайте его внутри формы с помощью обычной кнопки отправки, чтобы, если у пользователя отключен JavaScript, вы просто перестраивали HTML на стороне сервера.

0 голосов
/ 05 января 2012
<html>
<body>
  <select id="MyDropDown" onchange="document.cookie= 'myDDIdx = ' + this.selectedIndex + '; path=/;'; window.open(this.options[this.selectedIndex].value,'_top')">
<option value="http://mysite.com/default1.aspx?alpha=A">A</option>
  <option value="http://mysite.com/default1.aspx?alpha=B">B</option>
  <option value="http://mysite.com/default1.aspx?alpha=C">C</option>
</select>

<script>
    var sidx = document.cookie.indexOf("myDDIdx");
if(sidx != -1)
    window.onload = function () { document.getElementById("MyDropDown").selectedIndex = document.cookie.substr(sidx + 8,1); }
</script>
</body>

0 голосов
/ 05 января 2012

Для сохранения выбора используйте это:

document.cookie='myselection='+this.selectedIndex; 

Это сделает ваш выбор доступным для куки с именем myselection

Напишите функцию для чтения куки и установите сохраненныезначение и вызвать его на нагрузку вашего документа.то есть

function setSavedValue() {
    var theCookie=" "+document.cookie;
    var ind=theCookie.indexOf(" myselection=");
    if (ind==-1) ind=theCookie.indexOf(";myselection=");
    if (ind==-1) return "";
    var ind1=theCookie.indexOf(";",ind+1);
    if (ind1==-1) ind1=theCookie.length; 
    return unescape(theCookie.substring(ind+'myselection'.length+2,ind1));
}

и вызовите его в свою нагрузку следующим образом:

<body onload="setSavedValue()">
...