Firefox'ta Hata - Yenileme Sırasında Sıfırlanmayan Girişin Devre Dışı Bırakma Özelliği


103

Firefox'ta bir hata olduğuna inandığım şeyi buldum ve bunun gerçekten bir hata olup olmadığını ve bunun için herhangi bir geçici çözüm olup olmadığını merak ediyorum.

Aşağıdaki kaynakla temel bir web sayfası oluşturursanız:

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

Eğer dinamik ve sonra sayfayı yenileyin, yerine özürlü değil orijinal durumuna geri sıfırlama engelli kalacaktır. Bunu IE8 ve Chrome'da denedim ve beklediğim gibi davranıyor, yenilediğimde geri devre dışı kalmayacak şekilde sıfırlanıyor .disabletextboxtextboxtextbox

Bir başka ilginç bilgi parçası da, girdi a checkboxyerine a ise yine aynı şeyi yapmasıdır textbox.


2
inputSadece yenilediğinizde öğelerin durumunu hatırladığı Firefox "özelliği" olmadığından emin misiniz ?
otuz nokta

@thirtydot: Bunu ben de merak ediyordum, bu yüzden "size" özelliğini dinamik olarak ayarlamayı denedim ve bu, diğer tüm tarayıcılarda olduğu gibi, yenileme üzerine sıfırlanıyor. Görünüşe göre şu ana kadar keşfettiğim şey, Firefox'un devre dışı bırakılmış özniteliği ve girdinin gerçek değerini koruyacağı, ancak boyutunu koruyamayacağı ...
Stephen Mesa

5
Vay, haklısın! Girişte autocomplete = "off" olarak ayarladım ve bu artık olmuyor. Firefox'un bunu varsayılan olarak açması oldukça sakıncalıdır!
Stephen Mesa

3
Evet, ile devre dışı bırakabileceğini unutmuşum autocomplete="off". Bu blog yazısı bana tanıdık geliyor, bu yüzden kesinlikle daha önce karşılaştım. Kendi sorunuza bir cevap yazmalısınız (yoksa yapmalı mıyım?)
otuz nokta

1
Bununla ilgili açık bir Mozilla hata raporu var: bugzilla.mozilla.org/show_bug.cgi?id=654072
cvrebert

Yanıtlar:


126

Bu, Firefox'un sayfa yenilemeleri boyunca form giriş değerlerini hatırlayan bir "özelliğidir" . Bu davranışı düzeltmek için autocomplete="off", girişleri içeren formu veya doğrudan girişi ayarlamanız yeterlidir .

Bu, otomatik tamamlamanın çalışmasını durdurur ve tarayıcının giriş alanlarının durumunu hatırlamasını engeller.

Alternatif olarak, CTRL + F5 tuşlarına basarak "tam olarak yenileyebilirsiniz". Bu, mevcut sayfayı tamamen sıfırlayacaktır.


4
Kullanıcı geri düğmesini tıkladığında bu soruna çarptım, autocomplete="off"bu durumda çalışmıyor gibi görünüyor .
solarc

1
bir form istemiyorum, sadece tek bir düğmem var ve Firefox devre dışı olduğunu "hatırlıyor" ... can sıkıcı. JS ile sıfırlayabilirim ama..ugly.
vsync

@vsync Düğme / giriş öğesinde ayarlamayı deneyin. Da çalışmalı!
Henrik Heimbuerger

4
Bunu düğmelerde bile yapmanız gerekiyor. Bunun bir hata değil bir özellik olduğuna inanmakta zorlanıyorum?
Liam

1
bu aynı zamanda gizli girişleri de etkiler
Liam

10

Geri düğmesiyle başa çıkmak için bunu yapın ( buradan )

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

Neden bu cevabın sadece bir yukarı oyu varken diğer cevabın 99'u olduğunu bilmiyorum. Otomatik tamamlama istenen bir işlev olduğundan, kaldırıldığında devre dışı bırakma durumunu geri yüklemek, otomatik tamamlamayı devre dışı bırakmaktan daha iyidir.
Nick

Bunun //enable button hereburada gereksiz olduğunu düşünüyorum ; anılan dokümanlar benim anlama basitçe olmasıdır varlığı Olay dinleyicisinin sayfa bfcache saklanacak önleyecektir.
myf

Firefox'ta bir kaldırma işleyicisi eklemenin başka yan etkileri olduğunu unutmayın: developer.mozilla.org/en-US/docs/Mozilla/Firefox/Releases/1.5/…
robocat

2

Daha önce de belirtildiği gibi autocomplete="off"düğmelerinize eklemeniz gerekir .

HTML dosyalarınızda / şablonlarınızda (bazı varsayımlar altında) URL'ler olması durumunda bunu otomatikleştirmek için bir sh+ perlsnippet <button>:

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

Varsayımlar şunlardır:

  • Açılış <button>etiketleri aynı satırda başlar ve biter. Durum böyle değilse (yani, birkaç satıra bölünmüş olabilirlerse), o zaman '' gerekir '' /gile değiştirmek /gsyardımcı olur ( sdeğiştirici , .yeni satırlarla eşleşmesine de neden olur )

  • Geçerli HTML (ör. <Ve arasında komik karakterler yoktur >) ve >açılış etiketinin içinde ( ) değerinden büyük çıkış karakteri yoktur .


0

Bu gerçekten de Firefox'ta açık bir hatadır . MDN'deautocomplete de bir not var : (ikinci sarı kutuya gidin):

Not: Bu autocompleteözellik, Firefox'un diğer tarayıcılardan farklı olarak dinamik devre dışı durumunu ve (uygunsa) bir <input>öğenin, <textarea>öğenin veya tüm <form>sayfa yüklemelerinde dinamik olarak denetlenmesinin devam edip etmeyeceğini de denetler . Kalıcılık özelliği varsayılan olarak etkindir. Özniteliğin değerini ayarlamakautocompleteoff bu özelliği devre dışı bırakır. Bu, otomatik tamamlama özniteliği türü nedeniyle normalde geçerli olmadığında bile çalışır. Bkz hata 654.072 .

Bootstrap kullanıyorsanız, şununla ilgilenebilirsiniz:

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.