У HTML кожен <input />
елемент асоціюється з одним (але не унікальним) іменем і цінністю пари. Ця пара надсилається у наступному запиті (у цьому випадку орган запиту POST), лише якщо <input />
"успішна".
Отже, якщо ви маєте ці дані у своєму <form>
DOM:
<input type="text" name="one" value="foo" />
<input type="text" name="two" value="bar" disabled="disabled" />
<input type="text" name="three" value="first" />
<input type="text" name="three" value="second" />
<input type="checkbox" name="four" value="baz" />
<input type="checkbox" name="five" value="baz" checked="checked" />
<input type="checkbox" name="six" value="qux" checked="checked" disabled="disabled" />
<input type="checkbox" name="" value="seven" checked="checked" />
<input type="radio" name="eight" value="corge" />
<input type="radio" name="eight" value="grault" checked="checked" />
<input type="radio" name="eight" value="garply" />
Згенерує ці пари + name + value, які будуть надіслані на сервер:
one=foo
three=first
three=second
five=baz
eight=grault
Зауважте, що:
two
і six
були виключені, оскільки вони мали disabled
набір атрибутів.
three
був надісланий двічі, оскільки він мав два дійсних введення з однаковою назвою.
four
не було надіслано, тому що це таке, checkbox
що не булоchecked
six
не було надіслано, незважаючи на те, checked
що disabled
атрибут має вищий пріоритет.
seven
не name=""
надісланий атрибут, тому він не подається.
Що стосується вашого запитання: ви можете бачити, що прапорець, який не встановлений, не матиме імені + пара значень, надісланий серверу, але з ним будуть надіслані інші входи, які мають те саме ім'я.
Такі рамки, як ASP.NET MVC, обробляють це шляхом (приховано) з'єднання кожного checkbox
входу з hidden
входом у виведений HTML, наприклад:
@Html.CheckBoxFor( m => m.SomeBooleanProperty )
Візуалізації:
<input type="checkbox" name="SomeBooleanProperty" value="true" />
<input type="hidden" name="SomeBooleanProperty" value="false" />
Якщо користувач не встановив прапорець, на сервер буде надіслано наступне:
SomeBooleanProperty=false
Якщо користувач перевірить прапорець, то обидва будуть надіслані:
SomeBooleanProperty=true
SomeBooleanProperty=false
Але сервер буде ігнорувати =false
версію, тому що вона бачить =true
версію, і тому, якщо вона не бачить, =true
вона може визначити, що прапорець було надано і що користувач не перевірив його - на відміну від того, що SomeBooleanProperty
входи взагалі не надаються.