Подтвердить что ты не робот

HTML: значение по умолчанию для флажка

Когда я отправляю HTML-форму с отмеченным флажком, который не имеет явно определенного value, Chrome отправляет on в качестве значения для этого поля.

Это стандартное поведение? Или что я могу ожидать от других браузеров?

4b9b3361

Ответ 1

В спецификации HTML 4.01 не указано значение отмеченного флажка. Это просто означает, что это "on", но это просто проза и не говорит, что такое значение по умолчанию. Но он также говорит (в описании элемента input), что в этом случае требуется атрибут value.

Итак, <input type=checkbox name=foo> имеет поведение undefined в отношении используемого значения, хотя на практике браузеры используют value=on как значение по умолчанию.

Ответ 2

Уровень жизни 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" является обычным явлением.

Ответ 3

Браузеры отправят значение флажка (в данных 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
}