ฉันรู้ว่า XHTML ไม่สนับสนุนแท็กแบบซ้อนและฉันได้อ่านคำตอบอื่น ๆ ที่นี่ใน Stack Overflow เกี่ยวกับเรื่องนี้แล้ว แต่ฉันยังไม่ได้หาวิธีแก้ปัญหาที่สง่างาม
บางคนบอกว่าคุณไม่ต้องการมันและพวกเขาไม่สามารถคิดได้ว่าจะต้องมีสถานการณ์แบบนี้ โดยส่วนตัวแล้วฉันไม่สามารถนึกถึงสถานการณ์ที่ฉันไม่ต้องการได้
มาดูตัวอย่างง่ายๆ
คุณกำลังสร้างแอพบล็อกและคุณมีแบบฟอร์มที่มีบางฟิลด์สำหรับสร้างโพสต์ใหม่และแถบเครื่องมือที่มี "การกระทำ" เช่น "บันทึก", "ลบ", "ยกเลิก"
<form
action="/post/dispatch/too_bad_the_action_url_is_in_the_form_tag_even_though_conceptually_every_submit_button_inside_it_may_need_to_post_to_a_diffent_distinct_url"
method="post">
<input type="text" name="foo" /> <!-- several of those here -->
<div id="toolbar">
<input type="submit" name="save" value="Save" />
<input type="submit" name="delete" value="Delete" />
<a href="/home/index">Cancel</a>
</div>
</form>
วัตถุประสงค์ของเราคือการเขียนแบบฟอร์มในลักษณะที่ไม่ต้องใช้ JavaScriptเพียงแค่ใช้แบบฟอร์ม HTML ธรรมดาและส่งปุ่ม
เนื่องจาก URL การกระทำถูกกำหนดไว้ในแท็กแบบฟอร์มและไม่ได้อยู่ในปุ่มส่งแต่ละปุ่มตัวเลือกเดียวของเราคือโพสต์ไปยัง URL ทั่วไปแล้วเริ่ม "ถ้า ... จากนั้น ... อื่น" เพื่อกำหนดชื่อของปุ่มที่ ถูกส่ง ไม่หรูหรามาก แต่เป็นทางเลือกเดียวของเราเนื่องจากเราไม่ต้องการพึ่งพา JavaScript
ปัญหาเพียงอย่างเดียวคือการกด "ลบ" จะส่งฟิลด์แบบฟอร์มทั้งหมดบนเซิร์ฟเวอร์แม้ว่าสิ่งเดียวที่จำเป็นสำหรับการกระทำนี้คืออินพุตที่ซ่อนพร้อม post-id ไม่ใช่เรื่องใหญ่ในตัวอย่างเล็ก ๆ นี้ แต่ฉันมีแบบฟอร์มที่มีหลายร้อย (เพื่อพูดถึง) ของฟิลด์และแท็บในแอปพลิเคชันLOBของฉันที่ (เนื่องจากความต้องการ) ต้องส่งทุกอย่างในครั้งเดียวและในกรณีใด ๆ และของเสีย หากสนับสนุนการซ้อนกันของฟอร์มอย่างน้อยที่สุดฉันก็จะสามารถห่อปุ่ม "ลบ" ส่งภายในรูปแบบของตัวเองโดยมีเพียงฟิลด์โพสต์ -id
คุณอาจพูดว่า "เพียงใช้" ลบ "เป็นลิงก์แทนที่จะส่ง" สิ่งนี้จะผิดในหลาย ๆ ระดับ แต่ที่สำคัญที่สุดเพราะการกระทำข้างเคียงเช่น "ลบ" ที่นี่ไม่ควรเป็นคำขอ GET
ดังนั้นคำถามของฉัน (โดยเฉพาะอย่างยิ่งกับผู้ที่กล่าวว่าพวกเขาไม่ต้องการทำรังในรูปแบบ) คุณจะทำอย่างไร มีวิธีแก้ปัญหาที่สวยงามที่ฉันขาดหายไปหรือบรรทัดล่างคือ "ต้องการ JavaScript หรือส่งทุกอย่าง"