2011-02-01 13 views
5

Hola (esta es una copia de mi publicación en la lista de correo de Seaside, primero intente en stackoverflow), ¿Cómo obtengo la visualización procesada de una gota -hacia abajo la lista de selección para mostrar una selección actualizada de otra sesión, en Firefox? (Estoy usando 3.6.13)Al usar la etiqueta HTML <select>, el valor 'seleccionado' cambiado no se muestra en Firefox

Este problema no aparece en Chrome, IE u Opera.

Aquí está el escenario: Tengo un objeto de dominio con un atributo que se muestra en una lista desplegable. Alguna otra sesión actualiza el atributo. Renuevo mi pantalla, pero la selección procesada no cambia. Usando Firebug, el html generado muestra la selección actualizada. Puede tratarse de conocimiento básico de HTML, pero ¿no debería actualizarse el valor mostrado para mostrar la opción 'seleccionada' modificada? ¿O el valor está destinado a establecerse solo en la visualización de la página inicial y solo a través de una acción del usuario?

Ejemplo: Tengo un componente de demostración Seaside con una variable de clase #testStateListSelection que se selecciona a 'uno' en una sesión de Seaside. Si cambio el valor a 'tres' en otra sesión de Seaside, el valor visualizado se mantiene como 'uno' en la sesión original después de la representación de nuevo, incluso si el "seleccionado" en el HTML generado muestra "tres".


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>

¿Cómo consigo el desplegable valor seleccionado para mostrar 'tres'?

Por cierto: todo lo que sabe acerca de HTML comportamiento & navegador que he aprendido de codificación de Mar, por lo que puede tener una perspectiva sesgada ;-)

Gracias por cualquier ayuda.

+0

Cuando se dice "después de rendir de nuevo" - tiene el navegador navegar a otra página, o simplemente has refrescado (F5 o equivalente) ¿la página? – Gareth

+0

Solo una actualización ... F5 o el botón "Recargar la página actual" –

Respuesta

8

El problema es que, cuando actualiza su página, su navegador está recordando qué opción se seleccionó previamente. Esta característica está diseñada para hacer que sea más difícil perder los datos del formulario durante largos formularios y se discute un poco en el Mozillazine forums

En lugar de actualizar la página. si carga la página "nueva" yendo a la barra de direcciones y presionando regresar, obtendrá la página cargada nuevamente desde el servidor - con la actualización select

+0

Esto me estaba volviendo loco. Gracias por esta respuesta. –

+0

Me gustaría saber qué se puede hacer para obligar al navegador a actualizar la pantalla en función del valor seleccionado sin pedirle al usuario que vuelva a cargar contenido de manera explícita desde la barra de direcciones. – mathieu

1

Siempre que se actualice la página de acceso se ejecuta el descriptor de acceso self class testStateListSelection.

De hecho, el código que proporcionas me funciona a la perfección. ¿Estás seguro de que los accesorios funcionan como se esperaba?

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

testStateListSelection: aString 
    testStateListSelection := aString 
+0

Sí, los accesadores son correctos. Me hago eco de la opción seleccionada en la transcripción y el código HTML generado refleja la selección. El problema solo aparece en Firefox y solo si el valor #testStateListSelection es cambiado por otra sesión. –

2

Otra causa del problema puede ser que su navegador intente completar automáticamente el formulario en función de su último envío. Asegúrese de haber desactivado esta función en las preferencias de su navegador web.También puede tratar de decir la forma en etiquetas con un atributo no oficial de no autocompletar:

html form noAutocomplete; with: [ ... 
+1

Excelente. Eso funciona. El HTML generado agrega autocompletar = "off" al formulario y el valor actualizado se muestra correctamente cuando se actualiza el navegador. Gracias. –

1

Si se utiliza javascript para actualizar la página ...

window.location.reload(); 

... no va a volver a hacer los elementos seleccionados Retendrán sus valores dinámicos independientemente de lo que diga el nuevo código fuente HTML.

Para forzar los elementos seleccionados a volver a hacer, utilizar ...

window.location.reload(true); 
Cuestiones relacionadas