ใน 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" />
จะสร้างคู่ชื่อ + ค่าเหล่านี้ซึ่งจะถูกส่งไปยังเซิร์ฟเวอร์:
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
อินพุตที่ไม่ได้แสดงผลเลย