Bug Dengan Firefox - Atribut Nonaktif dari Input Tidak Direset Saat Menyegarkan

103

Saya telah menemukan apa yang saya yakini sebagai bug pada Firefox dan saya bertanya-tanya apakah ini benar-benar bug, serta solusi untuk ini.

Jika Anda membuat halaman web dasar dengan sumber berikut:

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

Jika Anda disableyang textboxdinamis dan kemudian refresh halaman,textbox akan tetap dinonaktifkan bukannya ulang kembali ke keadaan semula tidak cacat. Saya sudah mencoba ini di IE8 dan Chrome dan mereka berperilaku seperti yang saya harapkan, mengatur ulang bagian textboxbelakang menjadi tidak dinonaktifkan saat saya menyegarkan.

Sedikit informasi menarik lainnya adalah bahwa ia masih melakukan hal yang sama jika inputnya adalah a, checkboxbukan a textbox.

Stephen Mesa
sumber
2
Apakah Anda yakin ini bukan hanya "fitur" Firefox yang mengingat status inputelemen saat Anda menyegarkan?
tigapuluhdot
@thirtydot: Saya juga bertanya-tanya tentang itu, jadi saya juga mencoba bereksperimen dengan menyetel atribut "size" secara dinamis, dan itu akan disetel ulang setelah refresh, seperti semua browser lainnya. Jadi sepertinya yang saya temukan sejauh ini adalah bahwa Firefox akan mempertahankan atribut yang dinonaktifkan serta nilai input yang sebenarnya, tetapi bukan ukurannya ...
Stephen Mesa
5
Wah, kamu benar! Saya menyetel autocomplete = "off" pada input dan ini tidak lagi terjadi. Itu sangat tidak nyaman karena firefox mengaktifkannya secara default!
Stephen Mesa
3
Ya, saya lupa Anda dapat menonaktifkannya dengan autocomplete="off". Posting blog ini terlihat tidak asing bagi saya, jadi saya pasti pernah menemukan ini sebelumnya. Anda harus menulis jawaban untuk pertanyaan Anda sendiri (atau haruskah saya?)
tigapuluhdot
1
Ada laporan bug Mozilla terbuka tentang ini: bugzilla.mozilla.org/show_bug.cgi?id=654072
cvrebert

Jawaban:

126

Ini adalah "fitur" Firefox yang mengingat nilai input formulir di seluruh penyegaran halaman. Untuk memperbaiki perilaku ini, Anda cukup mengatur autocomplete="off"pada form yang berisi input, atau langsung saja ke input.

Ini menghentikan pelengkapan otomatis agar tidak berfungsi dan mencegah browser mengingat status kolom input.

Sebagai alternatif, Anda dapat "menyegarkan" dengan mengklik CTRL + F5. Ini akan menyetel ulang halaman saat ini sepenuhnya.

Stephen Mesa
sumber
4
Saya baru saja mengalami masalah ini ketika pengguna mengklik tombol kembali, sepertinya autocomplete="off"tidak berfungsi dalam kasus itu.
solarc
1
saya tidak ingin formulir, saya hanya memiliki satu tombol dan Firefox "mengingat" itu dinonaktifkan .. mengganggu. Saya bisa meresetnya melalui JS tapi..ugly.
vsync
@vsync Coba setel pada tombol / elemen masukan. Harus bekerja juga!
Henrik Heimbuerger
4
Anda bahkan harus melakukan ini pada tombol. Saya merasa sulit untuk percaya bahwa ini adalah fitur dan bukan bug?
Liam
1
ini juga mempengaruhi masukan tersembunyi juga
Liam
10

Untuk menangani tombol kembali, lakukan ini (dari sini )

    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);
    }
Joshua Fox
sumber
Saya tidak tahu mengapa jawaban ini hanya memiliki satu suara naik sedangkan jawaban lainnya memiliki 99. Mengembalikan status nonaktif saat membongkar lebih baik daripada menonaktifkan pelengkapan otomatis, karena pelengkapan otomatis adalah fungsi yang diinginkan.
Nick
Saya pikir itu //enable button heremubazir di sini; pemahaman saya tentang dokumen yang dirujuk adalah bahwa hanya dengan kehadiran pendengar acara akan mencegah halaman disimpan di BFcache.
myf
Perhatikan bahwa menambahkan penangan bongkar memiliki efek samping lain di Firefox: developer.mozilla.org/en-US/docs/Mozilla/Firefox/Releases/1.5/…
robocat
2

Seperti yang disebutkan sebelumnya, Anda perlu menambahkan autocomplete="off"tombol Anda.

Berikut ini sh+ perlsnippet untuk mengotomatiskan hal ini dalam kasus <button>s di file / template HTML Anda (dengan beberapa asumsi):

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

Asumsinya adalah:

  • <button>Tag pembuka dimulai dan diakhiri pada baris yang sama. Jika ini tidak terjadi (yaitu mereka mungkin dibagi menjadi beberapa baris) maka mengganti /gdengan /gsharus membantu ( spengubah menyebabkan .untuk mencocokkan baris baru juga)

  • HTML yang valid (mis. Tidak ada karakter lucu antara <dan >) dan tidak ada unescaped lebih besar dari ( >) di dalam tag pembuka.

phk
sumber
0

Ini memang bug terbuka di Firefox. Ada juga catatan di MDN:autocomplete (gulir ke bawah ke kotak kuning kedua):

Catatan: autocompleteAtribut juga mengontrol apakah Firefox akan - tidak seperti browser lain - mempertahankan status dinamis dinonaktifkan dan (jika berlaku) pemeriksaan dinamis dari suatu <input>elemen, <textarea>elemen, atau seluruh <form>pemuatan halaman. Fitur persistensi diaktifkan secara default. Mengatur nilai autocompleteatribut untukoff menonaktifkan fitur ini. Ini berfungsi bahkan ketika atribut pelengkapan otomatis biasanya tidak berlaku berdasarkan tipenya. Lihat bug 654072 .

Jika Anda menggunakan Bootstrap, Anda mungkin tertarik dengan file

str
sumber