ページをリロードするときにチェックボックスがオンのままになるのはなぜですか?


82

次のコードを含むWebページをリロードしています。

<label for="showimage">Show Image</label>
<input id="showimage" name="showimage" type="checkbox" value="1" />

ブラウザに送信されたままのHTMLは、ページのリロードごとに同じですが、リロードが実行されると、チェックボックスは常にチェックされた値になります。つまり、ユーザーがチェックボックスをオンにしてリロードした場合でも、チェックボックスはオンのままです。

ここでキャッシュが行われていますか?

編集:以下のGordon Bellのソリューションを試しましたが、value = "1"を削除した後もこれが引き続き発生していることがわかりました。他に何か足りないものはありますか?

<label for="showimage">Show Image</label> 
<input id="showimage" name="showimage" type="checkbox" /> 

回答:


38

はい、キャッシュしていると思います。たとえば、Firefoxでこの動作が見られます(Safariではなく、その価値があります:))。

あなたは、ページをリロードし、キャッシュバイパス(Firefoxの上の)使用することができますCTRL- SHIFT-Rあなたがチェック値が運ばない表示されます(通常のCTRL-Rしかし、キャッシュからの情報をつかむだろう)

編集:Firefoxでこのサーバー側を無効にして、キャッシュ制御ヘッダーを設定することができました:

Cache-Control: no-store

これはFirefoxの「フォーム値の記憶」機能を無効にしているようです


はい、CTRL-SHIFT-Rでチェックボックスがリセットされます。これがキャッシュされないようにする方法はありますか?
読み取り専用

私はそうは思いません(少なくともサーバー側からは)。Firefoxは物事のキャッシュに非常に積極的です。クライアント側からこのような状況で確実にキャッシュを停止することしかできませんでした
Owen

2
キャッシュから値を取得しているため、キャッシュされています。私があなたが言おうとしていることを誤解していない限り。
オーウェン

1
Firefoxの積極的なキャッシングは主要なPITAであり、それに対して開発するときは常に私を捕らえています。私はこれまでCache-Controlヘッダーを試したことがありませんが、それが機能する場合は、stackoverflowがここで費やす時間を完全に正当化しています。
cruachan

1
値は、Firefoxのダウンロードされたファイルストアのように「キャッシュ」から取得されていません。例:移動して同じURLをたどると、ページはキャッシュされますが、値はキャッシュされません。キャッシュを解除することで、ハードリロードを強制できますが、これによって機能が無効になるのは偶然です。
bobince 2008年

166

autocomplete="off"ページのフォーム要素に追加します。欠点は、これが有効なXHTMLではないことですが、複雑なJavaScriptなしで問題を修正します。


1
cache-controlヘッダーが機能しない場合は機能します。
ラヨシュメサロス2014

7
私が読んでいることから、それ実際にはHTML5で有効です。(この件について詳しく読む前に、以前のコメントに賛成しました。)HTML5を使用している場合は、チェックボックスで心ゆくまでオートコンプリートを使用してください。
EF0 2015年

3
10年以上後。この答えは私に頭痛を救った!
Daan van denBergh20年

33

jsでautocomplete = "off"を設定することもうまく機能しています。

たとえば、jqueryを使用します。

$(":checkbox").attr("autocomplete", "off");

おかげで、それは私を大いに助けました。:)
Lyubomyr Shaydariv 2011年

1
フォームのIDは$("#formId").attr("autocomplete", "off")どこにあるかが必要であることがわかりました#formId
ダンディプロ2012

@DanDiploフォームなしでチェックボックスを使用することが多いため、適用するのは非論理的です( "#formId")。attr( "autocomplete"、 "off")
Clain Dsilva 2014年

2
@ClainDsilvaフォームの外でチェックボックスを使用できるからといって、私が言ったことが非論理的であるとは限りません。完全に包括的ではないと主張するかもしれませんが(ほとんどのシナリオで機能しますが)、機能することを考えると、論理的ではないと言うのは奇妙です。
ダンディプロ2014年

@DanDiploは、チェックボックスのみでオートコンプリートオフを適用できる場合、その方法で正常に機能します。ソリューションが機能することに同意しますが、フォームボックス内のすべての要素にも適用されます。ただし、それは意図した動作ではない可能性があります。質問は、フォーム全体ではなく、チェックボックスのみに絞り込まれました。敬意を表して、質問に合わせた最適なソリューションを見つけたいと思います。このコンテキストでは、フォーム全体にオートコンプリートを適用することは正しくありません。
Clain Dsilva 2014年

1

これはFirefoxの優れた機能です。何かを入力してもページをリロードすると、テキストはテキスト領域に残ります。選択した他の設定と同じです。

残念ながら、SO(おそらくJSによってリセットされます)やIEのような面倒なブラウザでは機能しません...

これは解決策を示唆しています。本当にそれを行う必要がある場合は、JSでフォームをリセットしてください。form.reset()がその仕事をするかもしれません([入力のリセット]ボタンのように機能します)。


1
少しハッキーなようです、または大砲でスズメを撃つようなものです。
ラヨシュメサロス2014

@MészárosLajosハッキー/オーバーキルとは何ですか、なぜそれをそのように見ているのですか?もっと簡単なものがありますか?
PhiLho 2014

フォームを部分的にリセットするだけの場合はどうなりますか?個人的には、チェックボックスの入力キャッシュを無効にしたいだけで、テキストフィールドは無効にしません。これはFirefoxの優れた機能ですが、基本的に再設計されたチェックボックスであるカスタムの2つの状態ボタンには当てはまらないことに完全に同意します。もう1つは、なぜjavascriptを使用するのでしょうか。ここでは、htmlプロパティを使用するだけでこの動作を防ぐことができます。はい、「autocomplete = off」を使用するとhtmlコードが無効になりますが、ページは引き続き機能します。
ラヨシュメサロス2014

3
「Firefoxの優れた機能」:検索結果ページのフィルタリングチェックボックスをクリックしてからリロードすると、チェックされたフィルターは表示されたデータセットでは意味がありません。-前述のように、これは主要なPITAだと思います。
シャーキー2014

私はこれを素晴らしい機能とは決して呼びません...はい、たくさんのテキストを入力してからページを更新する必要があるときに役立ちますが、UIを開発している場合は、それは素晴らしい機能とはほど遠いです特徴。
userfuser 2015年

1

これは古い質問ですが、Firefoxにとってはまだ活発な問題です。私が試した応答のいずれも、それを解決していないが、何やった私のためにそれを解決するため、単純にこれをしました。

    document.getElementById('formId').reset();

これにより、ページが読み込まれるたびにフォームがデフォルトのオプションにリセットされます。きめ細かい制御が失われるため理想的ではありませんが、これを解決したのはそれだけです。


0

または、f5の代わりにアドレスバーのEnterキーを押します:)


1
または、むしろそれを行うようにユーザーに提案します(これは開発者の質問です)。
氏TA

ユーザーが常にCrtl + Shift + Rでページを更新することを期待することはできませんね。
ラヨシュメサロス2014

0

これは、ブラウザのキャッシュが原因である可能性があります。あまり頻繁に変更されない静的Webサイトには非常に役立ち、動的Webアプリケーションには非常に適していません。
ページのヘッドセクションにある2つのメタタグを試してみてください。2番目のメタタグは、「キャッシュなし」メタタグを認識しない古いブラウザー(IE5)用であり、異なるものの、同じ結果を生成します。各要求はサーバーに送信されます。

<META HTTP-EQUIV="Pragma" CONTENT="no-cache"> 
<META HTTP-EQUIV="Expires" CONTENT="-1">

IE5のような古いブラウザは本当に気になりますか?ちなみに、<head>で使用するメタタグが少ないため、PHPでヘッダーを送信する方が少し良いようです
Lajos Meszaros 2014

2
彼の答えは2008年で、@MészárosLajosのコメントは2014年でした。当時、そうです、それは重要でした。
Duniyadnd 2015年


0

それを解決するための公の考え

フォームを作成してボタンをリセット

<form>
<checkbox>
<reset>
</form>

$(reset).trigger("click");//to clear the cache and input 
$(checkbox).trigger("click");//to mark checkbox
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.