Когда я отправляю HTML-форму с отмеченным флажком, который не имеет явно определенного value
, Chrome отправляет on
в качестве значения для этого поля.
Это стандартное поведение? Или что я могу ожидать от других браузеров?
Когда я отправляю HTML-форму с отмеченным флажком, который не имеет явно определенного value
, Chrome отправляет on
в качестве значения для этого поля.
Это стандартное поведение? Или что я могу ожидать от других браузеров?
В спецификации HTML 4.01 не указано значение отмеченного флажка. Это просто означает, что это "on", но это просто проза и не говорит, что такое значение по умолчанию. Но он также говорит (в описании элемента input
), что в этом случае требуется атрибут value
.
Итак, <input type=checkbox name=foo>
имеет поведение undefined в отношении используемого значения, хотя на практике браузеры используют value=on
как значение по умолчанию.
Уровень жизни HTML отражает это: значение находится в режиме "по умолчанию/вкл", это означает, что значение "on
", если атрибут значения не указан. Из 4.10.7.1.16 Состояние флажка (тип =) - HTML
Уровень жизни (сентябрь 2013 г.):
- Атрибут IDL значения находится в режиме default/on.
[...]
по умолчанию/на
При получении, если элемент имеет атрибутvalue
, он должен вернуть это значение атрибута; в противном случае он должен вернуть строку "on
". При настройке он должен установить атрибутvalue
элемента в новое значение.
Это довольно тождественно также часть другой спецификации HTML, это W3C HTML 5 августа 2013 г. Рекомендация:
Для справки мой предыдущий комментарий:
Firefox (сентябрь 2013 г.), Chrome (сентябрь 2013 г.), Internet Explorer (6): "on". Я подозреваю, что это долгий путь. http://lxr.mozilla.org/classic/source/lib/layout/layform.c#86 - поскольку большинство браузеров должны иметь какое-то значение по умолчанию для своих собственных объектов кода, я думаю, что этот "on" является обычным явлением.
Браузеры отправят значение флажка (в данных POST) только в том случае, если он установлен. Проверка того, что значение (любое значение) для определенного флажка присутствует в данных POST, - это все, что вам нужно.
то есть.
// no need to check against 'on', 'true', '1' etc..
if(post data contains a value for checkbox1) {
// checkbox 1 is checked
}
else {
// not checked
}