Почему Firefox не показывает правильную опцию выбора по умолчанию?

я делаю веб-приложение для управления SKUS продукта. Одна из частей этого-связать SKU с именами продуктов. В каждой строке таблицы я перечисляю SKU и показываю <select> коробка с названиями продуктов. Продукт, который в настоящее время связан с этим SKU в базе данных, имеет атрибут selected="selected". Это можно изменить и обновить через AJAX.

здесь много товара <option>s-103, если быть точным - и этот список повторяется в <select> по каждому ряд.

из другого ввода на странице Я использую запросы jQuery AJAX для добавления новых ассоциаций SKU / product, и чтобы было ясно, что они добавляются мгновенно, я вставляю их в top таблицы с небольшим эффектом подсветки. Поскольку количество SKUs увеличивается после 10 или около того, если я обновляю страницу (которая загружает все обратно из базы данных, упорядоченной по названию продукта), Firefox начинает показывать некоторые неправильные параметры, выбранные по умолчанию. Она не последовательна о какой неправильной опции он показывает, но, похоже, смешивает параметры, которые существовали до перезагрузки страницы.

если я проверю <select> используя Firebug,select="selected" правильное <option> тег. Обновление страницы (или уход и ввод URL-адреса этой страницы для возврата) не делает ее правильной, но жесткое обновление (Ctrl+F5) делает.

и Chrome, и IE7 отображают это правильно в первую очередь.

мой теория заключается в том, что это результат ошибочной стратегии кэша Firefox. Это звучит правильно? Есть ли способ сказать в моем коде "если эта страница обновлена, сделайте ее жестким обновлением - перезагрузите все с нуля?"

обновление

чтобы решить эту проблему, я изменил стратегию.

  • ранее, я поставил <select> с длинным списком <option>s в каждой строке таблицы с текущим значением по умолчанию
  • теперь я ставлю ток значение в <span>. Если пользователь нажимает кнопку "Изменить", заменить <span> С <select>, и кнопка " Изменить "становится кнопкой" подтвердить". Если они изменяют параметры и нажимают "подтвердить", AJAX обновляет базу данных, а также <select> восходит к <span> на этот раз с новым значением.

это имеет два преимущества:

  • он исправляет ошибку, описанную выше
  • требует далеко меньше элементов DOM на странице (все эти избыточные <option>s)

10 ответов


Firefox сохраняет выбранные элементы формы при обновлении. Это нарочно. Ctrl+F5-это" жесткое " обновление, которое отключает это поведение.

--

или Command+Shift+R, Если вы находитесь на Mac


У меня была похожая проблема, но после добавления autocomplete="off" HTML атрибут для каждого тега select он работал. [Я использовал Firefox 8]


простой способ предотвратить кэширование Firefox последний выбранный вариант-удалить все элементы опции на странице выгрузки. Например (при условии jQuery):

$(window).unload(function() {
  $('select option').remove();
});

у меня была такая же проблема. Я пытался изменить значение select в зависимости от того, какой параметр был выбран="выбран", но Firefox не работал. По умолчанию всегда используется первый вариант.

Chrome, Safari и т. д. Работали, когда я это делал:

$( 'option[value="myVal"]' ).attr( 'selected', 'selected' );

... но это не работало в FF.

поэтому я попытался:

$( 'option[value="myVal"]' ).prop( 'selected', 'selected' );

и это работает.

С jQuery версии v1.9.1


Я делаю это, поставив автозаполнение= " off " на скрытый вход.


хотя это старый вопрос, но ниже Решение может помочь кому-то

в firefox я заметил, что атрибут "selected" не будет работать, если вы не разместите выберите внутри форма, где форма имеет атрибут name.

<form name="test_form" method="POST">
<select name="city">
<option value="1">Test</option>
<option selected="selected" value="2">Test2</option>
</selecct>

еще раз запомните:

  1. форма должна быть "имя" атрибут и
  2. "выберите" должно быть внутри форма.

Firebug имеет функцию отключения кэша для именно этого сценария.

более глубокое долгосрочное решение состоит в том, чтобы выяснить, как установить серверную сторону заголовков без кэша. Какой веб-сервер вы используете?


каждый раз, когда у меня были странные ошибки выбора опции в Firefox, это было потому, что у меня было несколько опций, помеченных как выбранные. Вы уверены, что только один помечен как таковой? Кажется, вы могли бы выйти из wack довольно легко, если вы меняете это с AJAX.


FYI: чтобы остановить Firefox от восстановления ранее выбранной опции после перезагрузки страницы, вы можете разместить весь <form> содержащий <select> параметры внутри <iframe>.

когда поля выбора находятся в <iframe> и вы перезагружаете страницу контейнера, Firefox, наконец, ведет себя как и все другие браузеры, просто сбросив параметры выбора.


Я понял. Если вы ставите onunload или $(window).выгрузка (jquery) на вашем HTML без заголовка кэша Firefox перезагружает страницу и инициализирует DOM даже с кнопки "Назад".