Вы не можете полагаться на браузер для поддержания вашего сайта состояния. Когда вы используете кнопку «Назад», а значение скрытого поля все еще существует, обратите внимание, что дополнительно, возможно, вы не получите такого же поведения с другими браузерами.
Это означает, что вам необходимо сохранить и поддерживать сайт самостоятельно. Если вы использовали ajax для навигации по своему сайту, вы могли бы легко поддерживать состояние с помощью объекта, но, поскольку это не так, решение может заключаться в использовании файлов cookie.
EDIT: HTML5 Web Storage также может быть альтернативным решением, применяется такая же логика.
После кода по W3Schools, взяты из http://www.w3schools.com/js/js_cookies.asp
Чтобы установить куки
function setCookie(c_name,value,exdays)
{
var exdate=new Date();
exdate.setDate(exdate.getDate() + exdays);
var c_value=escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString());
document.cookie=c_name + "=" + c_value;
}
Чтобы получить значение куки
function getCookie(c_name)
{
var i,x,y,ARRcookies=document.cookie.split(";");
for (i=0;i<ARRcookies.length;i++)
{
x=ARRcookies[i].substr(0,ARRcookies[i].indexOf("="));
y=ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1);
x=x.replace(/^\s+|\s+$/g,"");
if (x==c_name)
{
return unescape(y);
}
}
}
Так вы в основном набор печенья когда пользователь выбирает цвет (используя setCookie()
), и каждый раз, когда страница загружается, вы проверяете значение cookie (используя getCookie()
) и заполняете страницу соответствующим образом.
Пример
//User has chosen a color, save that in a cookie for 1 day
setCookie("selectedColor", "green", 1);
//Page is loaded, check for cookie value...
$(document).ready(function()
{
//Get cookie value
var selectedColor = getCookie("selectedColor");
if(selectedColor != "")
{
//A color has been previously selected, add the CSS class accordingly
$("#"+selectedColor).addClass("selected");
}
});
EDIT: Чтобы сохранить только состояние, когда приходит с другого сайта (не только нажатие кнопки назад). Перезагрузка очищает все.
Предположим, пользователь установил цвет в page1.html
, затем перейдет на page2.html
, а затем возвращается к page1.html
.
В page1.html
сохраните выбранное значение цвета в файле cookie, как и раньше.
//User has chosen a color, save that in a cookie for 1 day
setCookie("selectedColor", "green", 1);
Но теперь, когда page1.html
нагрузки, только заполнить страницу с возможным ранее выбранным значением, если определенное печенье (описано ниже) установлено в true
.
//page1 is loaded
$(document).ready(function()
{
//Only populate page if "populate" cookie is set to true
if(getCookie("populate") != "true")
{ return; //Stop }
//Get cookie value
var selectedColor = getCookie("selectedColor");
if(selectedColor != "")
{
//A color has been previously selected, add the CSS class accordingly
$("#"+selectedColor).addClass("selected");
//Set "populate" cookie to false
setCookie("populate", "false", 1);
}
});
Теперь в page2.html
сделать это:
//page2 is loaded
$(document).ready(function()
{
//Set "populate" cookie to true
setCookie("populate", "true", 1);
}
Что это делает, что позволяет знать, если посетитель приходит с другой страницы, когда они достигают page1.html
. Имейте в виду, что если пользователь делает это ...
page1.html -> page2.html -> google.com -> page1.html
.. значения все равно будет там , Перезагрузка page1.html
очищает все. К сожалению, я не смогу предоставить вам примеры HTML5 Web Storage, поскольку я никогда не использовал его, но применение той же логики даст вам аналогичные результаты.
Надеюсь, это поможет.
Вы можете проверить скрытое поле при загрузке и установить класс – c0deNinja
Поделитесь некоторым кодом, пожалуйста. – Blazemonger
@ c0deNinja вы будете полагаться на браузер, чтобы сохранить это значение. Некоторые браузеры могут не делать этого, поскольку для них это не требуется. –