Является ли стандартным для браузеров поведение отправлять данные о входных значениях флажков, только если они отмечены при отправке формы?
И если данные значения не предоставлены, всегда ли значение по умолчанию всегда включено?
Предполагая, что вышеприведенное верно, является ли это согласованным поведением во всех браузерах?
<select>
с двумя вариантамиon
иoff
:-)В HTML каждый
<input />
элемент связан с одной (но не уникальной) парой имени и значения. Эта пара отправляется в последующем запросе (в данном случае это тело запроса POST), только если<input />
он «успешен».Так что, если у вас есть эти входы в вашей
<form>
DOM:Сгенерирует эти пары имя + значение, которые будут отправлены на сервер:
Заметь:
two
иsix
были исключены, потому что у них был установленdisabled
атрибут.three
был отправлен дважды, потому что у него было два допустимых входа с одинаковым именем.four
не был отправлен, потому что этоcheckbox
не былоchecked
six
не был отправлен несмотря на то,checked
чтоdisabled
атрибут имеет более высокий приоритет.seven
не имеетname=""
отправленного атрибута, поэтому он не передан.Что касается вашего вопроса: вы можете видеть, что флажок, который не отмечен, поэтому не будет отправлять на сервер свою пару имя / значение - но другие входные данные, которые имеют такое же имя, будут отправлены вместе с ним.
Фреймворки, такие как ASP.NET MVC, обходят это путем (тайно) связывания каждого
checkbox
ввода сhidden
вводом в отображаемом HTML, например, так:Оказывает:
Если пользователь не установит флажок, на сервер будет отправлено следующее:
Если пользователь установит флажок, будут отправлены оба:
Но сервер будет игнорировать
=false
версию, потому что он видит=true
версию, и поэтому, если он не видит,=true
он может определить, что флажок был отображен и что пользователь не проверял его, в отличие отSomeBooleanProperty
входных данных, которые вообще не отображались.источник
[]
в конце имени ввода, поведение по умолчанию - отправка только последнего элемента с этим именем, поэтому, пока скрытый ввод находится перед флажком, он будет работать.[]
суффикс не является частью спецификации HTML, и браузеры не обращаются с ним специально. Без[]
PHP разрешит доступ только к одному значению (последнему значению) вместо всех значений.Если флажок не установлен, он не влияет на данные, отправленные при отправке формы.
Раздел HTML5 4.10.22.4 Создание набора данных формы описывает способ построения данных формы:
и тогда значение по умолчанию
on
указывается, еслиvalue
отсутствует:Таким образом, непроверенные флажки пропускаются при построении данных формы.
Подобное поведение требуется в HTML4 . Разумно ожидать такого поведения от всех совместимых браузеров.
источник
Флажки публикуют значение «вкл» тогда и только тогда, когда флажок установлен. Установленный для ловли значения флажка вы можете использовать скрытые вводы
JS :
HTML :
источник
Да, потому что в противном случае не было бы надежного способа определить, был ли флажок установлен на самом деле или нет (если он изменил значение, может существовать случай, когда желаемое значение, если оно было проверено, будет таким же, как и то, что было поменялся на).
Другие ответы подтверждают, что «по умолчанию» включено. Однако, если вы не заинтересованы в значении, просто используйте:
источник
Из спецификации HTML 4, которая должна быть совместимой практически во всех браузерах:
http://www.w3.org/TR/html401/interact/forms.html#checkbox
Успешный определяется следующим образом:
источник
тип ввода = "скрытый" имя = "is_main" значение = "0"
input type = "checkbox" name = "is_main" value = "1"
так что вы можете контролировать это, как я сделал в приложении. если он проверяет, отправьте значение 1, иначе 0
источник
Ни один из приведенных ответов не удовлетворил меня. Я обнаружил, что лучшим решением является включение скрытого ввода перед каждым флажком ввода с тем же именем.
<input type="hidden" name="foo[]" value="off"/>
<input type="checkbox" name="foo[]"/>
Затем на стороне сервера, используя небольшой алгоритм, вы можете получить что-то более похожее на HTML.
Это будет необработанный ввод
И функция вернется
источник
У меня есть страница (форма), которая динамически генерирует флажок, поэтому эти ответы очень помогли. Мое решение очень похоже на многие здесь, но я не могу не думать, что его легче реализовать.
Сначала я поставил скрытое поле ввода в соответствие с моим флажком, т.е.
Теперь, если все
checkboxes
они не выбраны, значения, возвращаемые скрытым полем, будут отключены.Например, здесь с пятью динамически вставленными флажками формируются
POSTS
следующие значения:Это показывает, что только 3-й и 4-й флажки являются
on
илиchecked
.В сущности, манекен или скрытые поля ввода просто указывает , что все выключено , если не является «на» ниже индекс выключен, который затем дает индекс вам нужно без единой строчки кода на стороне клиента.
,
источник
Точно так же, как вариант ASP.NET, за исключением того, что ставьте скрытый ввод с тем же именем перед фактическим флажком (с тем же именем). Будут отправлены только последние значения. Таким образом, если флажок установлен, то отправляется его имя и значение «on», тогда как если флажок снят, то будет отправлено имя соответствующего скрытого ввода и любое значение, которое вы хотели бы дать ему. В конце вы получите считываемый массив $ _POST со всеми отмеченными и непроверенными элементами, значениями on и false, без дубликатов ключей. Легко обрабатывать в PHP.
источник
Имея ту же проблему с непроверенными флажками, которые не будут отправляться при отправке форм, я предложил другое решение, чем зеркальное отражение элементов флажков.
Получение всех непроверенных флажков с
источник
Я решил проблему с этим кодом:
HTML-форма
и функцию javascript путем изменения формы значения флажка:
и сервер проверил, является ли сообщение данных «включено» или «выключено». Я использовал playframework Java
источник