Почему флажок остается установленным в FF3, но не в IE, Chrome или

Итак - у меня есть флажок

<asp:CheckBox ID="chkOrder" runat="server" Visible='<%#IsCheckBoxVisible() %>' 
     Checked="false"
     OnCheckedChanged="chkOrder_CheckedChanged" AutoPostBack="true" 
     EnableViewState="false"></asp:CheckBox>

тот, что выше. Теперь флажок находится в представлении сетки и привязан к данным — для всех строк в представлении сетки флажок установлен в значение false. Проблема в том, что первый флажок все еще установлен.

В IE такой проблемы нет, как и в Chrome. У меня заканчиваются варианты. Также, если я использую

$("checkboxName").attr("checked"); // verified on jquery ready function.

В FF это правда; ИИ ложный; Хром ложный.

Какие-нибудь советы?

ИЗМЕНИТЬ

Теперь приготовьтесь к этому: в сгенерированном html НЕТ проверенного атрибута. Разница между FF и IE одинакова.

Другое дело - сетка, содержащая флажки, имеет панель ajax, и когда я просматриваю сетку, пытаюсь перейти на страницу 2 - срабатывает CheckChanged в отделенном коде.


person sirrocco    schedule 16.10.2008    source источник


Ответы (6)


В некоторых php-кодах, которые я недавно делал, я заметил, что FF3 запоминает то, что я проверял, даже после обновления страницы F5. Просмотр источника показал правильный HTML, который я хотел сгенерировать. Чтобы обойти это, нужно было подняться в адресную строку и снова принудительно запросить страницу.

Почему этот обходной путь был необходим, я не уверен, но с точки зрения обычного удобства использования я оценил его, но не во время разработки.

person shrub34    schedule 16.10.2008
comment
Вы абсолютно правы... ФФ что-то вспоминал :| и я делал window.location.reload(). Теперь window.location = window.location :). Спасибо. - person sirrocco; 16.10.2008

Firefox по умолчанию запоминает состояние полей формы. Ctrl+F5 заставит Firefox очистить этот кеш.

Вы можете отключить это для отдельных форм и элементов ввода:

<form autocomplete="off"> 

<input ... autocomplete="off" /> 
person Karl    schedule 16.10.2008

Вам следует полностью опустить атрибут "checked", если вы не хотите, чтобы флажок был установлен, поскольку проверка запускается наличием атрибута checked, а не его значением:

Флажки (и радиокнопки) — это переключатели включения/выключения, которые может переключать пользователь. Переключатель находится во включенном состоянии, когда установлен атрибут checked элемента управления.

http://www.w3.org/TR/html401/interact/forms.html#checkbox

Для меня следующая разметка создает флажок, который отмечен в IE, Firefox и Opera, как и следовало ожидать, исходя из спецификации:

<input type="checkbox" checked="false">
person Jonny Buchanan    schedule 16.10.2008
comment
Судя по характеристикам - ожидать от него ничего не стоит. Проверяется единственное допустимое значение для проверенного атрибута. Если вы укажете false, вы приземлитесь на неуказанной территории. - person Quentin; 16.10.2008
comment
нет, исходя из спецификации, поскольку существует проверенный атрибут, его следует проверить. - person nickf; 16.10.2008
comment
Из спецификации: checked (checked) — есть атрибут checked, он принимает значение checked. См. также w3.org/TR/html4/intro/ sgmltut.html#h-3.3.4.2 - person Quentin; 17.10.2008

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

<html>
<body>

<input type="checkbox" checked="false" id="cb" />

<script language="javascript">
if (cb.checked == true)
  document.write('this is retarded');
</script>

</body>
</html>
person checktarded    schedule 22.03.2011

Вы пытались сравнить сгенерированный HTML из FF и IE? (с "просмотр исходного html")

Просто для более точной локализации проблемы. Это лишь небольшой шанс, но если HTML отличается для обоих браузеров, у вас есть проблема на стороне сервера с тем, как ASP создает HTML.

Если оба одинаковы и полностью HTML-жалоба, вы нашли ошибку в FF,

person Huibert Gill    schedule 16.10.2008

Это также происходит с выбором полей в FireFox 3, что может быть серьезной проблемой, если вы используете указанное поле для запуска AJAX/обновления страницы.

Если пользователь обновляет страницу или делает какие-то странные действия с кнопкой «Назад», он может закончить тем, что поле выбора все еще выбрано, но на самом деле ему придется отменить выбор и повторно выбрать, чтобы повторно запустить AJAX.

В этом случае я обнаружил, что использование события body onunload для очистки любого выбора / флажков «решает» «проблему».

person Joe Zack    schedule 16.10.2008