Когда я отправляю 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
}