以下是有效的html:
<form action="a">
<input.../>
<form action="b">
<input.../>
<input.../>
<input.../>
</form>
<input.../>
</form>
当你提交b时,你只能得到内部表单中的字段。当你提交“a”时,你会得到所有字段减去“b”内的字段。
如果不可能,对于这种情况有什么可行的变通办法?
以下是有效的html:
<form action="a">
<input.../>
<form action="b">
<input.../>
<input.../>
<input.../>
</form>
<input.../>
</form>
当你提交b时,你只能得到内部表单中的字段。当你提交“a”时,你会得到所有字段减去“b”内的字段。
如果不可能,对于这种情况有什么可行的变通办法?
当前回答
HTML 4。x & HTML5不允许嵌套表单,但HTML5允许使用“form”属性(“form owner”)。
至于HTML 4。X你可以:
使用一个只有隐藏字段和JavaScript的额外表单来设置其输入并提交表单。 使用CSS来排列几个HTML表单,使其看起来像一个单一的实体-但这可能很复杂。
其他回答
快速的解决方案: 要获得不同表单的不同验证,并将它们的提交保存在独立的函数中,您可以这样做:
<form id="form1" onsubmit="alert('form1')"></form>
<form id="form2" onsubmit="alert('form2')"></form>
<div>
<input form="form1" required />
<input form="form1" required />
<div>
<input form="form2" required />
<input form="form2" required />
<button form="form2" type="submit">Send form2</button>
</div>
<input form="form1" required />
<button form="form1" type="submit">Send form1</button>
</div>
不,HTML规范规定任何FORM元素都不应该包含另一个FORM元素。
答:它不是有效的HTML或XHTML
在官方W3C XHTML规范的B节中。“元素禁令”规定:
"表单不能包含其他表单元素。"
http://www.w3.org/TR/xhtml1/#prohibitions
对于旧的HTML 3.2规范, 关于FORMS元素的部分声明:
"每一份表格都必须用 表单元素。可以有几个 表单放在单个文档中,但是 FORM元素不能嵌套。
B.解决方案
有一些使用JavaScript而不需要嵌套表单标记的变通方法。
“如何创建嵌套表单。”(尽管title不是嵌套的表单标签,而是JavaScript的解决方案)。
这是StackOverflow问题的答案
注意:尽管可以通过脚本操纵DOM来欺骗W3C验证器来传递页面,但它仍然不是合法的HTML。使用这种方法的问题是,现在无法保证跨浏览器的代码行为。(因为不是标准)
如果有人发现这篇文章是一个不需要JS的伟大解决方案。使用两个具有不同名称属性的提交按钮,在您的服务器语言中检查哪个提交按钮被按下,因为只有一个将被发送到服务器。
<form method="post" action="ServerFileToExecute.php">
<input type="submit" name="save" value="Click here to save" />
<input type="submit" name="delete" value="Click here to delete" />
</form>
如果你使用php,服务器端看起来是这样的:
<?php
if(isset($_POST['save']))
echo "Stored!";
else if(isset($_POST['delete']))
echo "Deleted!";
else
echo "Action is missing!";
?>
通过将HTML代码输入W3 Validator,您可以非常容易地回答自己的问题。(它有一个文本输入域,你甚至不需要把你的代码放在服务器上…)
(不,它不会生效。)