Ответ 1
Firefox сохраняет выбранные элементы формы при обновлении. Это намеренно. Ctrl + F5 - это "жесткое" обновление, которое отключает это поведение.
-
Или Command + Shift + R, если вы находитесь на Mac
Я делаю веб-приложение для управления продуктом SKUS. Одна из них - связать SKU с названиями продуктов. В каждой строке таблицы я перечисляю SKU и показываю окно <select>
с названиями продуктов. Продукту, который в настоящее время ассоциируется с этим SKU в базе данных, присваивается атрибут типа selected="selected"
. Это можно изменить и обновить с помощью AJAX.
<option>
- 103, и этот список повторяется в <select>
для каждой строки.
С другого ввода на странице я использую jQuery AJAX-запросы для добавления новых ассоциаций SKU/product, и чтобы было ясно, что они добавлены мгновенно, я вставляю их в верхний стол с небольшим эффектом подсветки. Поскольку количество SKU увеличивается до 10 или около того, если я обновляю страницу (которая загружает все обратно из базы данных, заказанной по названию продукта), Firefox начинает показывать некоторые неправильные параметры по умолчанию. Он несовместим с тем, какой неправильный вариант он показывает, но он, кажется, смешивает параметры, существовавшие до перезагрузки страницы.
Если я проверяю <select>
с помощью Firebug, select="selected"
находится в правильном теге <option>
. Обновление страницы (или удаление и ввод URL-адреса этой страницы для возврата) не делает его корректным, но жесткое обновление (Ctrl + F5) делает.
Оба Chrome и IE7 отображают это правильно в первую очередь.
Моя теория заключается в том, что это результат ошибочной стратегии кеширования Firefox. Правильно ли это звучит? Есть ли способ, который я могу сказать в своем коде "если эта страница обновлена, сделать ее жестким обновлением - перезагрузить все с нуля?"
Чтобы решить эту проблему, я изменил стратегии.
<select>
с длинным списком <option>
в каждой строке таблицы, с текущим значением, установленным по умолчанию<span>
. Если пользователь нажимает кнопку "изменить", я заменяю <span>
на <select>
, а кнопка "change" становится кнопкой "подтвердить". Если они меняют параметры и нажимают подтвердить, AJAX обновляет базу данных, а <select>
возвращается к <span>
, на этот раз с новым значением.Это имеет два преимущества:
<option>
s)Firefox сохраняет выбранные элементы формы при обновлении. Это намеренно. Ctrl + F5 - это "жесткое" обновление, которое отключает это поведение.
-
Или Command + Shift + R, если вы находитесь на Mac
У меня была аналогичная проблема, но после добавления атрибута autocomplete="off"
HTML для каждого тега select он работал. [Я использовал Firefox 8]
Простым способом предотвращения кэширования Firefox последним выбранным вариантом является удаление всех элементов опции на странице разгрузки. Например (предполагая jQuery):
$(window).unload(function() {
$('select option').remove();
});
У меня была такая же проблема. Я пытался изменить значение выбора в зависимости от выбранного параметра = "selected", но Firefox не работал. Он всегда будет использовать первый вариант.
Chrome, Safari и т.д. работали, когда я это делал:
$( 'option[value="myVal"]' ).attr( 'selected', 'selected' );
... но это не работает в FF.
Итак, я попробовал:
$( 'option[value="myVal"]' ).prop( 'selected', 'selected' );
и он работает.
jQuery v1.9.1
Я заработал, положив autocomplete = "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>
Снова вспомните:
Firebug имеет функцию отключения кэша для этого сценария.
Более глубокое долгосрочное решение состоит в том, чтобы определить, как установить серверный сервер без кеша. Какой веб-сервер вы используете?
Каждый раз, когда у меня когда-либо были странные ошибки выбора в Firefox, это было потому, что у меня было несколько опций, отмеченных как выделенные. Вы уверены, что только один отмечен как таковой? Похоже, вы можете легко избавиться от wack, если вы меняете это с помощью AJAX.
FYI: чтобы Firefox не восстанавливал ранее выбранную опцию после перезагрузки страницы, вы можете разместить весь <form>
, содержащий параметры <select>
внутри <iframe>
.
При выборе полей в <iframe>
и перезагрузке страницы контейнера Firefox, наконец, ведет себя как ВСЕ другие браузеры, просто сбросив параметры выбора.
Спасибо @BananaDeveloper (fooobar.com/questions/73326/...) - это мое решение для решения этой проблемы на одной странице приложения
Я не хотел настраивать готовый/открытый исходный код приложения
<Files "page_that_does_not_work.php">
SetOutputFilter INFLATE;SUBSTITUTE;DEFLATE
Substitute 's/<select/<select autocomplete="off"/n'
Substitute 's/<form/<form novalidate/n'
</Files>
Документы Apache для mod_substitute
https://httpd.apache.org/docs/2.4/mod/mod_substitute.html
Спасибо: https://serverfault.com/questions/843905/apache-mod-substitute-works-in-curl-but-not-on-browser для SetOutputFilter
Я понял. Если вы поместите onunload или $(window).unload(jquery) в свой HTML с заголовком без кеша, Firefox перезагрузит страницу и инициализирует DOM даже с задней кнопки.