2009-10-09 3 views
0

На моем сайте, у меня есть две галочки, созданные с моей точки зрения ASP.NET MVC, как так:Проверяется радиокнопки проверяются в Firefox

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

Я уверен, что ViewData [ «someKey»] имеет значение «правда» в нем.

В моей 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, как я могу изменить свой код, чтобы он работал?

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

Edit: Я хотел бы также отметить, что, когда кнопка радио визуализируются после обновления в FF, это на самом деле не является отображается как проверенные либо, несмотря на то, что HTML говорит мне.

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

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

ответ

0

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

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

EDIT: This page имеет хорошее описание проблемы и решений, которые вы можете решить, чтобы решить эту проблему.

+0

Возможно, вам следует пояснить, что это связано с ошибкой Firefox, которая появляется при динамическом добавлении или удалении полей ввода: https://bugzilla.mozilla.org/show_bug.cgi?id=539228 –

0

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

+0

Я выстрелил, и это, похоже, не помогло. Эта проблема, похоже, не появляется ни в одном другом браузере (даже IE!), Поэтому я немного смущен, почему Firefox это сделает. –

1

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

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

+0

Я добавил оскорбительный HTML. –

+0

Erm, только что заметил, что мой оригинальный код не указывал на проблему. Радиокнопки имели одно и то же имя, но разные значения. (Извинения!) –

+1

К сожалению, я не могу воспроизвести это в FF3.0/3.5 с указанным кодом. Нет ли других элементов с идентификатором или именем check1? Это имеет значение, если вы пропустите jQuery и спросите 'document.getElementById ('check1'). Checked'? – bobince

0

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

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

0

Я использовал это, чтобы заставить firefox сбросить радиообъекты, проверенные при обновлении.

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

где [0] является индексом RadioButton в определенной группе (первый переключатель [0] = [1] = второй переключатель, ..)

0

Мы имели аналогичная ошибка в 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 
} 
Смежные вопросы