您好(这是我在Seaside邮件列表上的帖子的副本;首先尝试使用stackoverflow), 如何在Firefox中获取下拉选择列表的渲染显示以显示来自另一个会话的更新选择? (我正在使用3.6.13)
此问题不会出现在Chrome,IE或Opera中。
以下是该场景:我有一个域对象,其属性显示在下拉列表中。其他一些会话更新该属性。我刷新我的显示,但渲染的选择不会改变。使用Firebug,生成的html显示更新的选择。这可能是基本的HTML知识,但如果显示的值不更新以显示更改的“选定”选项?或者是仅在初始页面显示上设置的值,然后仅由用户操作设置?
示例:我有一个带有类变量#testStateListSelection的演示Seaside组件,它在Seaside会话中被选为“1”。如果我在另一个Seaside会话中将值更改为“3”,则再次渲染后显示的值在原始会话中保持为“1”,即使生成的HTML中的“已选择”显示为“3”。
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>
如何让下拉选择值显示为“三”?
BTW:我所知道的HTML&amp;我从编码Seaside中学到的浏览器行为,所以我可能有一个偏斜的观点;-)
感谢您的帮助。
答案 0 :(得分:8)
问题在于,当您刷新页面时,浏览器会记住之前选择的选项。此功能旨在让您在长篇文章中更难丢失表单数据,并在Mozillazine forums
上进行了一些讨论。而不是刷新页面。如果您通过转到地址栏并按回车来加载页面“新鲜”,您将再次从服务器加载页面 - 使用更新的select
答案 1 :(得分:2)
问题的另一个原因可能是您的浏览器尝试根据您上次提交的内容自动填写表单。确保已在Web浏览器的首选项中禁用此功能。您还可以尝试使用非官方属性告诉form-tag不要自动完成:
html form noAutocomplete; with: [ ...
答案 2 :(得分:1)
每当刷新页面时,都会运行访问者self class testStateListSelection
。
事实上,您提供的代码对我来说非常合适。您确定访问者按预期工作吗?
testStateListSelection
^ testStateListSelection " <-- forgetting the return is a common problem "
testStateListSelection: aString
testStateListSelection := aString
答案 3 :(得分:1)
如果使用javascript刷新页面......
window.location.reload();
...不会重新渲染选择元素。无论新源HTML如何说明,它们都将保留其动态值。
要强制选择元素重新渲染,请使用...
window.location.reload(true);