При использовании HTML-тега ‹select› измененное значение «selected» не отображается в Firefox.

Здравствуйте (это копия моего сообщения в списке рассылки Seaside; сначала попробуйте в stackoverflow). Как мне получить визуализированное отображение раскрывающегося списка выбора, чтобы показать обновленный выбор из другого сеанса в Firefox? (я использую 3.6.13)

Эта проблема не возникает в Chrome, IE или Opera.

Вот сценарий: у меня есть объект домена с атрибутом, отображаемым в раскрывающемся списке. Какой-то другой сеанс обновляет атрибут. Я обновляю свое отображение, но отображаемый выбор не меняется. Используя Firebug, сгенерированный html показывает обновленный выбор. Это может быть базовое знание HTML, но не должно ли отображаемое значение обновляться, чтобы показать измененную опцию «выбрано»? Или значение предназначено для установки только на начальном отображении страницы, а затем только с помощью действия пользователя?

Пример: у меня есть демонстрационный компонент Seaside с переменной класса #testStateListSelection, которая выбрана как «единица» в сеансе Seaside. Если я изменю значение на «три» в другом сеансе Seaside, отображаемое значение останется равным «один» в исходном сеансе после повторного рендеринга, даже если «выбрано» в сгенерированном HTML показывает «три».


renderSelectionListOn: html
    html form: [
        html select 
            list: #('one' 'two' 'three' 'four' 'five'); 
            selected: self class testStateListSelection; 
            callback: [:value | self class testStateListSelection: value].
        html break.
        html submitButton
            callback: [Transcript cr; show: self class testStateListSelection];
            with: 'Save']

...the displayed value shows 'one', even though the HTML is...

<select name="1">
<option value="1">one</option>
<option value="2">two</option>
<option value="3" selected="selected">three</option>
<option value="4">four</option>
<option value="5">five</option>
</select>

Как сделать так, чтобы в раскрывающемся списке выбранное значение отображало «три»?

Кстати: все, что я знаю о HTML и поведении браузера, я узнал из кода Seaside, поэтому у меня может быть искаженная точка зрения ;-)

Спасибо за любую помощь.


person Bob Nemec    schedule 01.02.2011    source источник
comment
Когда вы говорите после повторного рендеринга - браузер перешел на другую страницу или вы только что обновили (F5 или эквивалент) страницу?   -  person Gareth    schedule 01.02.2011
comment
Просто обновление ... F5 или кнопка «Обновить текущую страницу»   -  person Bob Nemec    schedule 01.02.2011


Ответы (4)


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

Вместо обновления страницы. если вы загрузите страницу «свежей», перейдя в адресную строку и нажав клавишу возврата, вы снова загрузите страницу с сервера — с обновленным select

person Gareth    schedule 01.02.2011
comment
Это сводило меня с ума. Спасибо за этот ответ. - person ; 05.01.2012
comment
Мне было бы любопытно узнать, что можно сделать, чтобы заставить браузер обновлять отображение на основе выбранного значения, не прося пользователя явно перезагружать данные из адресной строки. - person mathieu; 03.04.2012

Другая причина проблемы может заключаться в том, что ваш браузер пытается автоматически заполнить форму на основе вашей последней отправки. Убедитесь, что вы отключили эту функцию в настройках вашего веб-браузера. Вы также можете попытаться запретить автозаполнение тегу формы с неофициальным атрибутом:

html form noAutocomplete; with: [ ...
person Lukas Renggli    schedule 01.02.2011
comment
Отлично. Это работает. Сгенерированный HTML-код добавляет autocomplete=off в форму, и обновленное значение отображается правильно при обновлении браузера. Спасибо. - person Bob Nemec; 02.02.2011

Всякий раз, когда страница обновляется, запускается метод доступа self class testStateListSelection.

На самом деле код, который вы предоставляете, отлично работает для меня. Вы уверены, что средства доступа работают должным образом?

testStateListSelection
   ^ testStateListSelection    " <-- forgetting the return is a common problem "

testStateListSelection: aString
   testStateListSelection := aString
person Lukas Renggli    schedule 01.02.2011
comment
Да, аксессоры правильные. Я повторяю выбранный вариант в стенограмме, и сгенерированный HTML отражает выбор. Проблема возникает только в Firefox и только в том случае, если значение #testStateListSelection изменено другим сеансом. - person Bob Nemec; 02.02.2011

Если использовать javascript для обновления страницы...

window.location.reload();

... НЕ будет повторно отображать выбранные элементы. Они сохранят свои динамические значения независимо от того, что говорит новый исходный HTML.

Чтобы заставить выбранные элементы перерисовываться, используйте...

window.location.reload(true);
person Michael    schedule 16.11.2011