Почему флажок остается отмеченным в FF3, но не в IE, Chrome или
-
03-07-2019 - |
Вопрос
Итак, у меня есть флажок
<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 в коде программной части.
Решение
Недавно при кодировании PHP я заметил, что FF3 запоминает то, что я проверял, даже после обновления страницы F5.Просмотр исходного кода показал правильный HTML-код, который я хотел создать.Чтобы обойти эту проблему, нужно было подойти к адресной строке и снова принудительно запросить страницу.
Почему эта работа была необходима, я не уверен, но с точки зрения обычного удобства использования я ее оценил, но не во время разработки.
Другие советы
Firefox по умолчанию запоминает состояние полей формы. Ctrl+F5
заставит Firefox очистить этот кеш.
Вы можете отключить это для отдельных форм и элементов ввода:
<form autocomplete="off">
<input ... autocomplete="off" />
Вам следует полностью опустить атрибут «проверено», если вы не хотите, чтобы флажок устанавливался, поскольку проверка инициируется присутствие из checked
атрибут, а не его значение:
Флажки (и переключатели) — это переключатели включения/выключения, которые может переключать пользователь. Переключатель находится в положении «включено», когда установлен атрибут «проверено» элемента управления..
http://www.w3.org/TR/html401/interact/forms.html#checkbox
Для меня следующая разметка создает флажок, который проверяется в IE, Firefox и Opera, как и следовало ожидать, исходя из спецификации:
<input type="checkbox" checked="false">
это проливает свет на интересную особенность флажков.вот очень простой 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>
Вы пытались сравнить сгенерированный HTML из FF и IE?(с «просмотром исходного кода HTML»)
Просто чтобы точнее локализовать проблему.Это лишь небольшой шанс, но если HTML-код в обоих браузерах разный, на стороне сервера возникает проблема с тем, как ASP создает HTML.
Если оба одинаковы и полностью HTML-жалоба, вы обнаружили ошибку в FF,
Это также происходит при выборе полей в FireFox 3, что может стать серьезной проблемой, если вы используете указанное поле для запуска AJAX/обновления страницы.
Если пользователь обновляет страницу или делает какие-то странные действия с кнопкой «Назад», у него может оказаться, что поле выбора все еще выбрано, но на самом деле ему придется отменить выбор и повторно выбрать, чтобы повторно запустить AJAX.
В этом случае я обнаружил, что использование события onunload тела для очистки всех полей выбора/флажков «решает» «проблему».
$("input[id$=chkOrder]").click(function() {
if (!$(this).attr("checked")) { $(this).removeAttr("checked"); }
else { $(this).attr("checked", "checked"); }
})