我知道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是在Form标记中定义的,而不是在每个提交按钮中定义的,因此我们唯一的选择是发布到通用URL,然后启动“ if ... then ... else”来确定该按钮的名称。已提交。不是很优雅,但是我们唯一的选择,因为我们不想依赖JavaScript。
唯一的问题是,即使执行此操作所需的唯一操作是带有post-id的Hidden输入,按“ Delete”键仍将提交服务器上的所有表单字段。在这个小例子中不是什么大问题,但是我的LOB应用程序中有数百个(可以说)字段和选项卡的表单(由于要求),必须一次性提交所有内容,在任何情况下,这似乎都非常低效和浪费。如果支持表单嵌套,那么我至少可以将“删除”提交按钮包装在它自己的表单内,而仅包含post-id字段。
您可以说“仅将“删除”实现为链接而不是提交”。在许多级别中,这都是错误的,但是最重要的是,由于副作用操作(例如此处的“删除”)永远都不应该是GET请求。
所以我的问题(特别是那些说不需要表格嵌套的人)是您要做什么?是否有任何我缺少的优雅解决方案,或者底线确实是“要么需要JavaScript要么提交所有内容”?