Bug con Firefox - Attributo di input disabilitato non ripristinato durante l'aggiornamento


103

Ho trovato quello che credo sia un bug con Firefox e mi chiedo se questo sia effettivamente un bug, così come eventuali soluzioni alternative per questo.

Se crei una pagina web di base con la seguente fonte:

<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>

Se disableil textboxmodo dinamico e quindi aggiornare la pagina, l' textboxrimarrà disattivato, invece di resettare torna al suo stato originale di non disabile. L'ho provato in IE8 e Chrome e quelli si comportano come mi aspetterei, ripristinando il textboxretro su non disabilitato quando aggiorno.

Un'altra informazione interessante è che fa ancora la stessa cosa se l'input è a checkboxinvece di a textbox.


2
Sei sicuro che non sia solo la "funzionalità" di Firefox che ricorda lo stato degli inputelementi quando si aggiorna?
30 punti

@thirtydot: mi stavo chiedendo anche questo, quindi ho anche provato a sperimentare con l'impostazione dinamica dell'attributo "size", che viene ripristinato all'aggiornamento, proprio come tutti gli altri browser. Quindi sembra che quello che ho scoperto finora è che Firefox manterrà l'attributo disabilitato e il valore effettivo dell'input, ma non la dimensione ...
Stephen Mesa

5
Wow, hai ragione! Ho impostato autocomplete = "off" sull'input e questo non accade più. È piuttosto scomodo che Firefox lo attivi di default!
Stephen Mesa

3
Sì, avevo dimenticato che puoi disattivarlo con autocomplete="off". Questo post sul blog mi sembra familiare, quindi l'ho già visto prima. Dovresti scrivere una risposta alla tua domanda (o dovrei?)
trentaduesimo

1
C'è un bug report di Mozilla aperto su questo: bugzilla.mozilla.org/show_bug.cgi?id=654072
cvrebert

Risposte:


126

Questa è una "funzionalità" di Firefox che ricorda i valori di input del modulo durante gli aggiornamenti della pagina. Per correggere questo comportamento, è sufficiente impostare autocomplete="off"sul modulo contenente gli input, o semplicemente direttamente sull'input.

Ciò interrompe il funzionamento del completamento automatico e impedisce al browser di ricordare lo stato dei campi di input.

In alternativa, puoi semplicemente "aggiornare" facendo clic su CTRL + F5. Questo ripristinerà completamente la pagina corrente.


4
Ho appena riscontrato questo problema quando l'utente fa clic sul pulsante Indietro, sembra autocomplete="off"che non funzioni in quel caso.
Solarc

1
non voglio un modulo, ho solo un pulsante e Firefox "ricorda" che è disabilitato .. noioso. Posso resettarlo tramite JS ma..ugly.
vsync

@vsync Prova a impostarlo sul pulsante / elemento di input. Dovrebbe funzionare anche tu!
Henrik Heimbuerger

4
Devi farlo anche sui pulsanti. Trovo difficile credere che questa sia una funzionalità e non un bug?
Liam

1
questo influisce anche sugli input nascosti
Liam

10

Per gestire il pulsante Indietro, fallo (da qui )

    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);
    }

Non so perché questa risposta ha solo un voto positivo mentre l'altra risposta ha 99. Il ripristino dello stato disabilitato allo scaricamento è meglio che disabilitare il completamento automatico, poiché il completamento automatico è una funzionalità desiderabile.
Nick

Penso che //enable button herequi sia ridondante; la mia comprensione dei documenti riferiti è che la semplice presenza di un listener di eventi impedirà la memorizzazione della pagina nella BFcache.
myf

Tieni presente che l'aggiunta di un gestore di
scaricamento

2

Come accennato prima, è necessario aggiungere autocomplete="off"ai pulsanti.

Ecco un sh+ perlsnippet per automatizzarlo nel caso di <button>s nei tuoi file / modelli HTML (sotto alcuni presupposti):

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

Le ipotesi sono:

  • I <button>tag di apertura iniziano e finiscono sulla stessa riga. Se questo non è il caso (cioè potrebbero essere divisi su più righe) allora la sostituzione /gcon /gsdovrebbe aiutare (il smodificatore fa sì .che corrisponda anche a nuove righe)

  • HTML valido (ad esempio, non ci sono caratteri divertenti tra <e >) e nessun carattere maggiore di ( >) senza caratteri di escape all'interno del tag di apertura.


0

Questo è davvero un bug aperto in Firefox. C'è anche una nota in MDN:autocomplete (scorri verso il basso fino alla seconda casella gialla):

Nota: l' autocompleteattributo controlla anche se Firefox, a differenza di altri browser, manterrà lo stato disabilitato dinamico e (se applicabile) il controllo dinamico di un <input>elemento, <textarea>elemento o interi <form>caricamenti di pagina. La funzione di persistenza è abilitata per impostazione predefinita. L'impostazione del valore autocompletedell'attributo suoff disabilita questa funzione. Funziona anche quando l'attributo di completamento automatico normalmente non si applica in virtù del suo tipo. Vedi bug 654072 .

Se stai usando Bootstrap, potresti essere interessato a

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.