ใน 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อินพุตที่ไม่ได้แสดงผลเลย