Проверка, проверены ли переключатели в Firefox - PullRequest
0 голосов
/ 09 октября 2009

На моем сайте в моем представлении ASP.NET MVC созданы два флажка:

Html.RadioButton("check", "true", "true" == (string) ViewData["someKey"], new { id = "check1"});
Html.RadioButton("check", "false", "false" == (string) ViewData["someKey"], new { id = "check2"});

Я уверен, что ViewData ["someKey"] содержит значение "true".

В моей функции инициализации JS я выполняю следующую проверку:

alert($('#check1').is(':checked') + " " + $('#check2').is(':checked'));

В Firefox (и только Firefox) мое диалоговое окно с предупреждением покажет следующее (оно работает, как и ожидалось, в любом другом браузере):

Initial page load: true false
Normal refresh via Ctrl + R: false false
Refresh skipping cache via Ctrl + Shift + R: true false

Я пробовал много разных способов просмотра значения флажка, включая $('#check1').attr('checked'), но безуспешно. Если я изучу HTML в Firebug, я увижу, что первый переключатель имеет свойство checked="checked".

Почему значение флажка меняется в FF при обновлении, и как я могу смягчить это? Так как это, похоже, ошибка только для FF, как я могу изменить свой код, чтобы он работал?

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

Редактировать : Я также должен отметить, что когда переключатель отображается после обновления в FF, он на самом деле не отображается как проверено, несмотря на то, что говорит HTML я.

Edit2 : добавление необработанного HTML согласно запросу

<input id="check1" type="radio" value="True" name="check" checked="checked"/>
<input id="check2" type="radio" value="False" name="check"/>

Ответы [ 6 ]

1 голос
/ 09 октября 2009

Можем ли мы увидеть сгенерированный HTML? Вы действительно создаете две радиокнопки с одинаковыми именами и с одинаковым значением?

Помните, что при нажатии кнопки «Обновить» браузеры пытаются сохранить содержимое поля формы на странице до обновления. Это включает состояние переключателя. Если у вас есть две неразличимые радиокнопки, это может показаться хорошим способом запутать браузер, пытающийся восстановить состояние формы.

0 голосов
/ 13 мая 2014

У нас была похожая ошибка в Firefox при использовании jquery для изменения выбора. Несмотря на то, что код изменился правильно в соответствии с firebug, ни одна из кнопок не была выбрана. Решение, которое мы нашли, состоит в том, чтобы удалить радио-кнопки из DOM и просто вернуть их обратно.

var allradiobuttons = $('...');
allradiobuttons.click(function() {
  var radiobutton = $(this);
  allradiobuttons.removeAttr("checked");

  radiobutton.attr("checked", "checked");
  var parent = radiobutton.parent();
  parent.html(parent.html()); // This is a weird fix
}
0 голосов
/ 16 июня 2010

Я использовал это для принудительного сброса firefox радиокнопок, проверенных при обновлении.

$(function(){ $('input[name="radiobuttongroup"]')[0].checked = true; });

где [0] - индекс радиокнопки в определенной группе ([0] = первая радиокнопка, [1] = вторая радиокнопка, ..)

0 голосов
/ 16 октября 2009

Кажется, что проблема не в проверке , проверены ли переключатели или нет, а в том, что они фактически не проверены, даже если HTML-код говорит об обратном.

Я разместил ответ на этот вопрос здесь в качестве дополнения к этой теме.

РЕДАКТИРОВАТЬ : Эта страница содержит подробное описание проблемы и способы ее решения.

0 голосов
/ 13 октября 2009

У меня была такая же проблема несколько дней назад, и проблема заключалась в том, что я выполнял «проверку» перед полной загрузкой или рендерингом элемента, это был DropDownList, который я рендерил с помощью jQuery.

Мой случай был очень конкретным, но мне пришлось переделать код, чтобы учесть это ...

0 голосов
/ 09 октября 2009

Похоже, ваш скрипт может быть запущен до полной загрузки страницы. Где вы положили код Javascript? Если вы еще этого не сделали, попробуйте переместить код в конец блока <body>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...