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


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

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

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

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

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

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

обновление

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

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

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

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

10 ответов:

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

--

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

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

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

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

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

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

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

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

поэтому я попробовал:

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

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

jQuery v1.9. 1

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

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

в firefox я заметил, что атрибут "выбранный" не будет работать, если вы не разместите выберите внутри форма, где форма имеет атрибут 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 или $(окно).выгрузка (jquery) на вашем HTML с заголовком без кэша Firefox перезагружает страницу и инициализирует DOM даже с кнопки "Назад".