Этот коварный disabled
January 8, 2008 by Scratch
Есть в html такая штука — checkbox. Штука очень удобная, полезная и вообще — почти ни один сайт не обходится без чекбоксов.
Но есть у чекбоксов дурная черта, да и не только у них… Но об этом по порядку.
Достаточно часто при создании страниц нужно сделать некоторый текст нередактируемым. Все замечательно, берем элемент, добавляем ему атрибут readonly, и все работает (точнее, все кроме редактирования).
А теперь пробуем проделать ту же штуку с чекбоксом — и видим, что его значение можно изменить, причем успешно.
Первое, что приходит на ум — это выставить ему значение disabled. Тогда он показывается, он даже может быть отмечен (checked), но — значение от него не отдается серверу при отправке формы. Нормальное поведение для нормального элемента, но — дело в том, что если чекбокс не отмечен, то его значение тоже не отправляется. То есть, в общем виде, имея только результат запроса от браузера, невозможно определить — значение checkbox не пришло потому что он не был выбран, или потому что он был запрещен…
Для того, чтобы решить эту проблему, можно использовать один небольшой трюк (кстати, он также позволяет делать другие интересные штуки, такие, как например гарантированную передачу переменной).
Вот, пример — мы отмечаем чекбокс, и при отправке формы сервер получает значение ‘On’ для этой переменной.
А если не отмечаем — то сервер все равно получает значение, на этот раз — ‘Off’.
Как это сделать? Очень просто:
<form method="post" action="?"> <!-- Два элемента ввода -- hidden и checkbox -- имеют одно и то же имя --> <input name="test" type="hidden" value="Off" /> <input name="test" type="checkbox" value="On" /> <input type="submit" /> </form>
Вот и все.
А для того, чтобы победить disabled, нужно просто (в случае с отмеченным, но запрещенным чекбоксом) записать в hidden поле то значение, которое вернул бы чекбокс (в нашем случае — ‘On’).
Filed under: Tips and tricks |