jquery - Firefox 在页面刷新时不刷新选择标签

标签 jquery html firefox html-select

我遇到了一个问题,我有一个选择标签,用户可以用它来选择手机品牌,然后使用 jquery 的页面只会显示这些手机。

感谢 stack overflow 上的人的帮助,这现在在除 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());
        }
    });
});

在此先感谢您的任何建议或帮助。

最佳答案

当刷新机制被正常激活时(F5),FireFox 将缓存表单值(包括select 框的选定值)。但是,如果用户选择执行硬刷新 (Ctrl+F5),则不会从缓存中获取这些值,您的代码将按预期工作。

由于用户会按照自己的意愿行事,因此您必须提供涵盖这两种情况的解决方案。这可以通过采取几种方法来完成:

  • 处理每次页面刷新:添加一些重置代码以在 window.onbeforeunload 事件监听器中设置默认选择状态。
  • 将该代码添加到 DOM ready 处理程序的开头。
  • 使用 cookie,如 this post from Ted Pavlic's blog 中所述, 以检测页面刷新并对其采取行动(在此处放置相同的代码)。
  • 在服务器端设置无缓存 header ,从而强制获取相关资源。

引用资料

注意:已在 linked SO post 上建议,以及评论中的此处,简单地关闭 autocomplete 。然而,这不是最好的解决方案——目的是处理页面刷新的情况。 autocomplete 用于控制 session 历史缓存和管理表单控件的提示。如果将来此实现发生变化,则该解决方案将失效。

关于jquery - Firefox 在页面刷新时不刷新选择标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10870567/

相关文章:

jQuery 同位素 : filter on page load based on get variable

javascript - 滚动 div 内的多个粘性标题

firefox - SVG 仅在 Firefox 中部分显示

javascript - 在 Firefox 中使用 history.pushState 让我的图标消失

jquery - jquery ui slider 下方和上方的标签

javascript - 在信息窗口调用 setContent 后 Jquery 选择器失败

javascript - 使 tinyscrollbar 与不断变化的动画内容一起工作

javascript - 没有 JavaScript 的 DOM 操作

jquery - 根据设备在 'collapse' 和 'collapse in' 之间进行 Bootstrap 切换

javascript - jQuery 单击事件的 event.target 返回被单击元素的子元素