Refresh - как избежать проблемы?

Ashotovich

Новичок
Refresh - как избежать проблемы?

Всем доброго времени суток.
У меня на странице при нажатии определенных чекбоксов некоторые элементы формы (fieldset, checkbox) скрываются, то бишь им присваивается JavaScript-ом свойство style.display="hidden".
Так вот, если после этого нажать на рефреш страницы в браузере (или нажать на F5) - то все скрытые элементы формы опять отображаются.

Вопрос: как быть? Может, кто-нибудь сталкивался с такой проблемой? Как заставить страницу запоминать внесенные изменения даже после нажатия на рефреш? Имеются в виду, конечно, не пассы и заклинания, а, допустим, внедрение некоего input="hidden"-элемента (значение которого, слава Богу, сохраняется и после рефреша), по которому встроенный в код скрипт определяет, что показывать, а что - нет. Других вариантов в голову не приходит...

Заранее спасибо за ответ.
 

Ashotovich

Новичок
То есть:

document.cookie = 'fieldset1status="hidden"';

, а потом это дело считывать? А как убить потом куку - при переходе на другую страницу? Или ей просто вписать какой-нибудь хитрый expire?
 

Ashotovich

Новичок
А, примерно понял. При нажатии сабмита в форме делать для куки

expireDate.setDate(expireDate.getDate()-1)

- так?
 

Falc

Новичок
Это уже дело конкретной задачи.
Я к примеру такое делал для запоминания раскрытых/закрытых пунктов в меню и при переходе со страницы на страницы открытые пункты оставались открытыми, если после повторного захода на форму надо чтобы состояния сбрасывались, то можешь чистить куки в ПХП при обработке данных из формы.
 

Ashotovich

Новичок
Еще один вопрос. А что будет, если я куку документа убью (вместо expireDate я просто делаю document.cookie="" по сабмиту формы - кстати, так можно делать?), перейду по сабмиту на другую страницу, а потом нажму "Back"? Кука-то уже пустая...
 

Falc

Новичок
>>document.cookie=""
Так куку не почистишь.

>>перейду по сабмиту на другую страницу, а потом нажму "Back"
А если пользователь перейдет через навигацию по сайту?
 

Ashotovich

Новичок
Насчет "не почистишь" - это зря. Чистится все за милую душу. Проверял.

А насчет навигации по сайту - ну так в том-то и проблема, что при переходе на страницу в нормальном порядке все должно отображаться полностью (то есть кука должна быть пустой), а вот при нажатии на Back - нет.
 

Falc

Новичок
>>Насчет "не почистишь" - это зря. Чистится все за милую душу. Проверял.
Страно, может я что-то перепутал.

>>переходе на страницу в нормальном порядке все должно отображаться полностью (то есть кука должна быть пустой), а вот при нажатии на Back - нет.
Старнный какой-то подход. Я обычно кнопку back расматриваю как альтернативную навигацию по сайту.
 

Ashotovich

Новичок
Дык проблема в том, что если кука убита и пользователь нажимает на кнопку "Назад", то он возвращается в форму, в которой те элементы, которые были скрыты, становятся видимыми и, следовательно, доступными к редактированию. А это не есть хорошо - иначе зачем бы я изголялся с сокрытием элементов?
 

Falc

Новичок
Попробуй тогда привязать удаление куки к какому-нибудь другому обитию, но боюсь все варианты будут иметь свои минусы :(
 

Ashotovich

Новичок
Угу... :( И javascript:window.location.replace() вместо обычных ссылок не поможет - прерывается сессия и ее ID придется передавать явным образом, что весьма небезопасно...
 

Ямерт

The Old One
Ashotovich, по-моему, ты не должен этого хотеть (с) Crazy.
Зачем пользователь обновляет страницу, с которой никуда не уходил? Имхо, затем, чтобы увидеть её в первоначальном виде. Если его лишить этой законной привилегии, он скорее всего не будет этому рад.
 

Ashotovich

Новичок
Ямерт, кто его знает... Может быть, я двигаюсь в тупиковом направлении.
Дело в том, что смысл всего этого вот в чем:
Пользователь оценивает нечто, ставя галки в чекбоксы оценочных определений типа: "Данное нечто соответсвует критерию №1", "Данное нечто соответсвует критерию №2" и пр. Поставил галку - значит "соответствует". Не поставил - нет.
Все оценочные определения разбиты на 4 уровня - по 12 в каждом уровне. Допустим, если "нечто" имеет оценочный уровень 3, то это означает, что предыдущие уровни пройдены успешно - все галки в них стоят.
Допустим, я редактирую запись о "нечто". Из базы в форму закачиваются данные о нем, текущий уровень оценочных определений и пр. Форма выводится - два первых уровня заполнены галками как пройденные, а третий (текущий) - нет. При этом галки из предыдущих уровней можно убирать. Если я, допустим, имея текущий уровень 3, уберу галку из уровня 2, то это будет означать, что текущий уровень оценочных вопросов у данного "нечто" сбрасывается до уровня, в котором убрали галку - т.е. до 2.

Реализуется у меня это просто: уровни оценочных определений у меня выводятся каждый в своем fieldset. У каждого fieldset есть свой id. При клике на любом из fieldset запускается функция, которая вычисляет, убрали ли галку в одном из предшествующих текущему уровней, и если такое произошло, то происходит document.*fieldset_id*.style.display="none" для всех уровней выше этого самого предшествующего уровня, из которого убрали галку.

Все это сделано так криво лишь потому, что приложение должно работать по всей России, т.е. лишний релоад страницы - минус.

Но, столкнувшись со столькими проблемами, я начинаю подумывать, что ну нафиг этот style.display="none" - уж лучше я буду передавать через POST в ту же форму номер нового уровня, по которому и буду вычислять - что выводить на экран, а что - нет. И хрен с ней с производительностью (ну сожрет это лишние 15 секунд на Иркутских 9600 кбит - не смертельно). Надо соблюдать баланс.
 

Ямерт

The Old One
Ashotovich, чем меньше функциональности ты накладываешь на Javascript, тем лучше.
 

Ashotovich

Новичок
Совсем без него работать ничего не будет. Но, столкнувшись с капризами версий ИЕ по отношению к JS, пришлось сильно задуматься... Например, какого лешего в неапгреженном IE 5.0 при вызове функции document.cookie.substring выскакивает ошибка "Объект не поодерживает свойство или метод"??? :mad:
 

Линк

Guest
Ashotovich


наверное потому что у Вас кук нету. Надо бы проверить - не пустая ли строка cookie. А еще лучше сделать toString()
 

Ashotovich

Новичок
Да есть там кука... И выводится она спокойно и радостно. А вот substring от нее не берется! При установке SP1 (хотя бы) все начинает работать. Но не говорить же всем юзерам: поставьте сервиспак! :(
 

Линк

Guest
так переперсвойте ее другой переменной...
 
Сверху