6

ユーザーが電話のブランドを選択するために使用する選択タグがあり、jqueryを使用するページにそれらの電話が表示されるという問題に遭遇しました。

スタック オーバーフローに関する人々の助けのおかげで、これは現在、Firefox を除くすべてのブラウザーでうまく機能します。何らかの理由でページを更新すると、選択タグには最後に選択したオプションが表示されますが、ページには設計どおりに使用可能なすべての電話が表示されます。Firefox に選択タグを更新させることについて、何か提案やアドバイスはありますか? js.fiddle では表示されないため、表示できません。

コードは次のとおりです。

<select class="manufacturers">
    <option class="selected" value="all">All</option>
    <option value="motorola">Motorola</option>
    <option value="htc">HTC</option>
    <option value="lg">LG</option>
    <option value="samsung">Samsung</option>
    <option value="kyocera">Kyocera</option>
</select>

<div class="scroll-content">
    <ul class="manulist motorola">
        <li><a href="#">Motorola Triumph</a></li>
    </ul>
    <ul class="manulist htc">
        <li><a href="#">HTC WILDFIRE S</a></li>
    </ul>
    <ul class="manulist lg">
        <li><a href="#">LG Optimus Slider</a></li>
        <li><a href="#">LG Optimus V</a></li>
        <li><a href="#">LG Rumor Touch</a></li>
        <li><a href="#">LG Rumor 2</a></li>
        <li><a href="#">LG 101</a></li>
    </ul>
    <ul class="manulist samsung">
        <li><a href="#">Samsung Intercept</a></li>
        <li><a href="#">Samsung Restore</a></li>
        <li><a href="#">Samsung M575</a></li>
    </ul>
</div>

jquery:

$(document).ready(function() {
    
    $('.manufacturers').change(function() {
        var selected = $(this).find(':selected');
        $('ul.manulist').hide();
        if ($(this).val() == 'all') {
            $('.scroll-content ul').show();
        } else {
            $('.' + selected.val()).show();
            $('.optionvalue').html(selected.html()).attr(
                    'class', 'optionvalue ' + selected.val());
        }
    });
});

アドバイスやヘルプをお寄せいただきありがとうございます。

4

4 に答える 4

13

selectFireFox は、更新メカニズムが正常にアクティブ化されると (ボックスの選択された値を含む) フォームの値をキャッシュします( F5)。ただし、ユーザーがハード リフレッシュ ( Ctrl+F5) の実行を選択した場合、これらの値はキャッシュからフェッチされず、コードは期待どおりに動作します。

ユーザーは自分の意志で行動するため、両方のケースをカバーするソリューションを提供する必要があります。これは、いくつかのアプローチを取ることによって行うことができます。

  • 各ページの更新を処理します。リセット コードを追加して、window.onbeforeunloadイベント リスナー内のデフォルトの選択状態を設定します。
  • そのコードを DOMreadyハンドラーの先頭に追加します。
  • Ted Pavlic のブログのこの投稿で説明されているように、Cookie を使用して、ページの更新を検出し、それに応じて処理します (同じコードを配置します)。
  • サーバー側でキャッシュなしヘッダーを設定して、関連するリソースを強制的にフェッチします。

参考文献

注:リンクされた SO の投稿とここのコメントで、単純にオフにすることが提案されています。ただし、これは最善の解決策ではありません。次の 2 つの理由からです互換性:HTML5 属性であるため、選択した実装を制限しています。b. セマンティクス:目的は、ページの更新のケースを処理することです。は、セッション履歴のキャッシュを制御し、フォーム コントロールのプロンプトを管理することを目的としています。この実装が将来変更された場合、そのソリューションは機能しなくなります。autocomplete autocompleteautocomplete

于 2012-06-03T13:48:05.013 に答える
6

選択タグがフォーム内にある場合は、属性autocomplete="off"を追加するだけで期待どおりに動作します。

于 2016-09-28T20:12:45.183 に答える