Firefox не обновляет выберите тег при обновлении страницы

Я столкнулся с проблемой, когда у меня есть тег выбора, который пользователь будет использовать для выбора марки телефона, и страница, использующая jquery, будет просто отображать эти телефоны.

Благодаря помощи людей с переполнением стека это теперь прекрасно работает на любом браузере, кроме Firefox. По какой-то причине, когда я обновляю страницу, тег выбора показывает последний выбранный параметр, но на странице отображаются все телефоны, доступные в соответствии с назначением. У кого-нибудь есть какие-либо предложения или советы по поводу того, как заставить Firefox обновить тег select? Я не могу показать его на js.fiddle, потому что этого не происходит, так что вот ссылка:

http://davidarabis.com/test/test.html

И вот код:

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

Заранее спасибо за любой совет или помощь.

 Shyju03 июн. 2012 г., 15:52
у меня отлично работает в Firefox. Очистите кеш браузера и посмотрите, что произойде

Ответы на вопрос(3)

у меня есть более простое решение. Почему бы не установить выбор обратно на индекс 0, когда документ готов? Это может выглядеть так:

$('.manufacturers').prop('selectedIndex',0);

Так что твой сценарий может выглядеть так:

$(document).ready(function() {

    $('.manufacturers').prop('selectedIndex',0);

    $('.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());
        }
    });
});

И после перезагрузки выбор вернется к первой позиции.

вы можете просто добавить атрибутautocomplete="off" к нему, и он будет вести себя как положено.

Решение Вопроса

select box), когда механизм обновления активирован нормально F5). Тем не менее, если пользователь решает выполнить жесткое обновление Ctrl+F5), эти значения не будут извлечены из кеша, и ваш код будет работать как положено.

Поскольку пользователи будут действовать по собственному желанию, вы должны предоставить решение для обоих случаев. Это можно сделать, используя несколько подходов:

Обращайтесь к обновлению каждой страницы: добавьте код сброса, чтобы установить выбранное по умолчанию состояние внутриwindow.onbeforeunload слушатель событий. Добавьте этот код в начале DOMready хендлер. Используйте куки, как описано в это сообщение из блога Теда Павлика, чтобы обнаружить обновление страницы и воздействовать на нее (поместив туда же код). Устанавливайте заголовки без кэширования на стороне сервера, таким образом вынуждая получать соответствующие ресурсы.Ссылкwindow.onbeforeunload в сети разработчиков Mozilla Сообщение о переполнении стека в кэшировании значений форм Firefox Сообщение в блоге об этой функции 2009 года Еще один пост в блоге о фичах 2008 года

Заметка Это было предложено на связанный пост SO, а также здесь, в комментариях, чтобы просто повернутьautocomplete выкл. Это, однако, не лучшее решение - по двум причинам:a. Совместимость autocomplete является HTML5 атрибут, поэтому мы ограничиваем нашу реализацию выбора, аb. Семантика Цель - обновить страницу.autocomplete предназначен для управления кэшированием истории сеансов и управления запросами элементов управления формы. Если эта реализация изменится в будущем, это решение сломается.

 Eliran Malka03 июн. 2012 г., 22:22
Я не буду рекомендовать это, смотрите обновленный ответ.
 Boris Zbarsky03 июн. 2012 г., 21:57
Или просто используйautocomplete=off на соответствующих элементах управления.
 matt b03 июн. 2012 г., 22:34
autocomplete долгое время был нестандартным атрибутом, поэтому его использование не привязывает вас к HTML5.
 Eliran Malka03 июн. 2012 г., 22:37
мы предпочитаем соответствовать стандартам, не так ли?
 xoam04 июн. 2012 г., 05:54
Спасибо, это сработало отлично. Я использовал этот код jquery, как советовали по второй ссылке, и он отлично работал. $ (window) .unload (function () {$ ('выбрать опцию'). remove ();});

Ваш ответ на вопрос