Firefoxのバグ-更新時に入力の無効属性がリセットされない


103

私はFirefoxのバグと思われるものを見つけました。これが実際にバグなのか、これの回避策があるのか​​と思います。

次のソースを使用して基本的なWebページを作成する場合:

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

あなたがいる場合、動的にしてからページを更新し、バック無効になっていないのが元の状態にリセットするのではなく、無効のままになります。私はIE8とChromeでこれを試しましたが、それらは期待どおりに動作し、更新時に無効に戻さないようにリセットされます。disabletextboxtextboxtextbox

もう1つの興味深い情報は、入力がのcheckbox代わりにの場合でも同じことを行うということですtextbox


2
input単に更新したときに要素の状態を記憶するのは、Firefoxの「機能」だけではないのですか?
thirtydot

@thirtydot:私もそれについて不思議に思っていたので、「size」属性を動的に設定する実験も試みましたが、他のすべてのブラウザーと同様に、更新時にリセットされます。したがって、これまでに発見したように、Firefoxは無効な属性と入力の実際の値を保持しますが、サイズは保持しません...
Stephen Mesa

5
うわー、あなたは正しいです!入力にautocomplete = "off"を設定すると、これは発生しなくなります。これは、Firefoxがデフォルトで有効にしているのはかなり不便です!
スティーブンメサ

3
ええ、私はそれをで無効にできることを忘れてしまいましたautocomplete="off"このブログの投稿は私には馴染みがあるように見えるので、私は間違いなくこれに出くわしました。あなた自身の質問への回答を書いてください(または私は?)
thirtydot '13年

1
これに関する未解決のMozillaバグレポートがあります:bugzilla.mozilla.org/show_bug.cgi
id

回答:


126

これは、ページの更新時にフォーム入力値を記憶するFirefoxの「機能」です。この動作を修正するautocomplete="off"には、入力を含むフォームに設定するか、直接入力に設定します。

これにより、オートコンプリートが機能しなくなり、ブラウザが入力フィールドの状態を記憶できなくなります。

または、CTRL + F5をクリックして、「ハードリフレッシュ」することもできます。これにより、現在のページが完全にリセットされます。


4
ユーザーが[戻る]ボタンをクリックしたときにこの問題autocomplete="off"が発生しました。その場合は機能しないようです。
solarc 2012

1
フォームは必要ありません。ボタンが1つだけあり、Firefoxは無効になっていることを「記憶」しています。JS経由でリセットできますが、醜いです。
vsync 2013年

@vsyncボタン/入力要素に設定してみてください。うまくいくはず!
Henrik Heimbuerger 2013

4
ボタンでもこれを行う必要があります。これがバグではなく機能であるとは信じがたいですか?
リアム

1
これは非表示の入力にも影響します
Liam

10

戻るボタンを処理するには、これを行います(ここから)

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

オートコンプリートは望ましい機能であるため、アンロード時に無効状態を復元することは、オートコンプリートを無効にするよりも優れています。
ニック

これ//enable button hereはここでは冗長だと思います。私が参照しているドキュメントを理解しているのは、単にイベントリスナーが存在すると、ページがBFcacheに格納されなくなるということです。
myf

:アンロードハンドラを追加すると、Firefoxで他の副作用があることに注意してくださいdeveloper.mozilla.org/en-US/docs/Mozilla/Firefox/Releases/1.5/...を
robocat

2

前述のようにautocomplete="off"、ボタンに追加する必要があります。

HTMLファイル/テンプレートにsがある場合にこれを自動化するためのsh+ perlスニペットを以下<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' \
  {} +

前提条件は次のとおりです。

  • 開始<button>タグは同じ行で開始および終了します。これが当てはまらない場合(つまり、複数の行に分割されている可能性がある場合)に置き換える/g/gs役立つはずです(s修飾子.改行も一致させます)。

  • 有効なHTML(たとえば、<との間におかしな文字は>ありません)、および>開始タグ内にエスケープされていない()より大はありません。


0

これは確かにFirefoxの未解決のバグです。MDNにautocompleteもメモがあります(2番目の黄色のボックスまでスクロールします):

注:このautocomplete属性は、他のブラウザーとは異なり、Firefoxが動的無効状態を維持するかどうか、および(該当する場合)<input>要素、<textarea>要素、または<form>ページ全体の全体の動的チェック維持するかどうかも制御します。永続化機能はデフォルトで有効になっています。属性の値を設定してautocompleteoffこの機能無効にします。これは、オートコンプリート属性がそのタイプによって通常適用されない場合でも機能します。バグ654072を参照してください。

Bootstrapを使用している場合は、

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.