2011-05-12 17 views
87

He encontrado lo que creo que es un error con Firefox y me pregunto si esto realmente es un error, así como cualquier solución para esto.Error con Firefox - Atributos desactivados de la entrada no se restablece al actualizar

Si crea una página web básica con la siguiente fuente:

<html> 
    <head> 
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.0/jquery.min.js"></script> 
    </head> 
    <body> 
    <div> 
     <input id="txtTest" type="text" /> 
     <input type="button" onclick="$('#txtTest').attr('disabled','disabled');" value="Set Disabled (jQuery)" /> 
     <input type="button" onclick="document.getElementById('txtTest').disabled = true;" value="Set Disabled (js)" /> 
     <input type="button" onclick="$('#txtTest').removeAttr('disabled');" value="Remove Disabled" /> 
    </div> 
    </body> 
</html> 

Si disable la textbox dinámicamente y luego actualizar la página, el textbox permanecerá desactivado lugar de restaurarlo a su estado original de no discapacitados . He intentado esto en IE8 y Chrome y esos se comportan como era de esperar, reiniciando el textbox de nuevo a no desactivado cuando actualizo.

Otra información interesante es que todavía hace lo mismo si la entrada es checkbox en lugar de textbox.

+2

¿Estás seguro de que no es solo la "característica" de Firefox donde recuerda el estado de los elementos de 'entrada' cuando simplemente actualizas? – thirtydot

+0

@thirtydot: Me preguntaba acerca de eso también, así que también traté de experimentar con establecer dinámicamente el atributo "tamaño", y eso se restablece al actualizar, al igual que todos los demás navegadores. Por lo tanto, parece que lo que he descubierto hasta ahora es que Firefox retendrá el atributo desactivado, así como el valor real de la entrada, pero no el tamaño ... –

+4

Guau, ¡tienes razón! Configuro autocompletar = "off" en la entrada y esto ya no ocurre.¡Es bastante inconveniente que Firefox lo active por defecto! –

Respuesta

104

Esta es una "característica" de Firefox que recuerda los valores de entrada de formulario a través de actualizaciones de página. Para corregir este comportamiento, simplemente configure autocomplete="off" en el formulario que contiene las entradas, o simplemente directamente a la entrada.

Esto detiene el autocompletado y evita que el navegador recuerde el estado de los campos de entrada.

De forma alternativa, puede simplemente "actualizar duro" haciendo clic en CTRL + F5. Esto restablecerá completamente la página actual.

+3

Acabo de resolver este problema cuando el usuario hace clic en el botón Atrás, parece 'autocompletar =" desactivado " 'no funciona en ese caso. – solarc

+1

no quiero un formulario, solo tengo un botón y Firefox "recuerda" que está deshabilitado ... molesto. Puedo restablecerlo a través de JS pero ... desagradable. – vsync

+0

@vsync Intenta configurarlo en el botón/elemento de entrada. ¡Debería funcionar también! –

6

para tratar con el botón de retroceso, hacer esto (de here)

window.addEventListener('pageshow', PageShowHandler, false); 
    window.addEventListener('unload', UnloadHandler, false); 

    function PageShowHandler() { 
     window.addEventListener('unload', UnloadHandler, false); 
    } 

    function UnloadHandler() { 
     //enable button here 
     window.removeEventListener('unload', UnloadHandler, false); 
    } 
+0

No sé por qué esta respuesta tiene solo un voto, mientras que la otra tiene 99. Restaurar el estado deshabilitado en la descarga es mejor que deshabilitar la función de autocompletar, ya que la autocompleta es una opción deseable funcionalidad. – Nick

1

Como se ha mencionado antes es necesario agregar autocomplete="off" a los botones.

Aquí hay un fragmento sh + perl para automatizar esto en el caso de <button> s en sus archivos HTML/templates (bajo ciertos supuestos):

find /path/to/html/templates -type f -name '*.html' -exec perl -pi -e \ 
    's/(?<=<button)(.*?)(?=>)/@{[(index($1,"autocomplete=")!=-1?"$1":"$1 autocomplete=\"off\"")]}/g' \ 
    {} + 

Los supuestos son:

  • Las etiquetas de apertura <button> comienzan y terminan en la misma línea. Si este no es el caso (es decir, que podrían ser divididos en varias líneas) volviendo a poner /g con /gs debería ayudar (los s modifier causas . para que coincida con saltos de línea también)

  • Valid HTML (por ejemplo, no hay personajes divertidos entre < y >) y sin protección superior a (>) dentro de la etiqueta de apertura.

Cuestiones relacionadas