bool HTMLParser::formCreateErrorCheck(Token* t, RefPtr<Node>& result)
{
// Only create a new form if we're not already inside one.
// This is consistent with other browsers' behavior.
if (!m_currentFormElement) {
m_currentFormElement = new HTMLFormElement(formTag, m_document);
result = m_currentFormElement;
pCloserCreateErrorCheck(t, result);
}
return false;
}
10
我遇到了类似的问题,我知道这不是问题的答案,但对于遇到这类问题的人来说这可能有所帮助: 如果需要将两个或多个形式的元素放在给定的序列中, HTML5<input> form 属性可以是解决方案 .
19 回答
在嵌套表单之前使用空表单标记
经过测试和使用Firefox,Chrome
没有在I.E.上测试过
总之,没有 . 您可以在页面中包含多个表单,但不应嵌套它们 .
来自html5 working draft:
第二种形式将被忽略,例如,请参阅WebKit中的snippet:
我遇到了类似的问题,我知道这不是问题的答案,但对于遇到这类问题的人来说这可能有所帮助:
如果需要将两个或多个形式的元素放在给定的序列中, HTML5
<input> form
属性可以是解决方案 .来自http://www.w3schools.com/tags/att_input_form.asp:
Scenario :
input_Form1_n1
input_Form2_n1
input_Form1_n2
input_Form2_n2
Implementation :
Here你'll find browser'兼容性 .
您还可以在按钮标记内使用formaction =“” .
这将作为单独的按钮嵌套在原始形式中 .
普通的HTML不允许你这样做 . 但是使用javascript你可以做到这一点 . 如果您使用的是javascript / jquery,则可以使用类对表单元素进行分类,然后使用serialize()仅序列化要提交的项目子集的表单元素 .
然后在你的javascript中你可以这样做来序列化class1元素
对于class2,你可以做到
对于整个表格
或简单地说
如果您正在使用AngularJS,则
ng-app
中的任何<form>
标记在运行时将被设计为嵌套的ngForm
指令替换 .正如克雷格所说,没有 .
但是,关于你对以下原因的评论:
使用输入和"Update"按钮可能更容易使用1
<form>
,并使用另一个<form>
中的"Submit Order"按钮复制隐藏输入 .解决这个问题的另一种方法是,如果你使用一些允许你操作发布数据的服务器端脚本语言,就是声明你的html表单如下:
如果您打印发布的数据(我将在这里使用PHP),您将获得如下数组:
然后你可以做类似的事情:
你的$ _POST现在只有你的“主表单”数据,你的子表单数据存储在你可以随意操作的另一个变量中 .
希望这可以帮助!
http://www.w3.org/MarkUp/html3/forms.html
https://www.w3.org/TR/html4/appendix/changes.html#h-A.3.9(html4规范注意到嵌套形式从3.2到4没有变化)
https://www.w3.org/TR/html4/appendix/changes.html#h-A.1.1.12(html4规范没有注意到从4.0到4.1的嵌套形式没有变化)
https://www.w3.org/TR/html5-diff/(html5规范没有注意到嵌套形式从4到5没有变化)
https://www.w3.org/TR/html5/forms.html#association-of-controls-and-forms对"This feature allows authors to work around the lack of support for nested form elements."的评论,但是没有引用指定的地方,我认为他们假设我们应该假设它是在html3规范中指定的:)
一个简单的解决方法是使用iframe来保存“嵌套”表单 . 在视觉上,表单是嵌套的,但在代码端,它在一个单独的html文件中 .
即使您可以在一个浏览器中使用它,也不能保证它在所有浏览器中都能正常工作 . 因此,虽然您可能会在某些时候让它工作,但您肯定无法让它始终工作 .
您甚至可能会遇到使其在同一浏览器的不同版本中工作的问题 . 所以避免使用它 .
虽然我没有提供嵌套表单的解决方案(它不能可靠地工作),但我确实提出了一个适用于我的解决方法:
使用场景:允许一次更改N个项目的超级表单 . 它底部有一个“全部提交”按钮 . 每个项目都希望拥有自己的嵌套表单,并带有“提交项目#N”按钮 . 但不能......
在这种情况下,实际上可以使用单个表单,然后将按钮的名称设置为
submit_1
..submit_N
和submitAll
并处理它服务器端,仅查看以_1
结尾的参数,如果按钮的名称是submit_1
.好吧,所以没有太多的发明,但它确实起了作用 .
关于嵌套表单:一天下午我花了10年时间尝试调试ajax脚本 .
我之前的回答/示例没有说明html标记,抱歉 .
form_2经常失败说无效的形式_2 .
当我移动生成的ajaxContainer时form_1
<i>outside</i>
,我重新开始营业 . 它回答了为什么人们可能会嵌套表格的问题 . 我的意思是,真的,如果不定义使用哪种形式,ID是什么?必须有一个更好,更光滑的工作 .虽然问题很老,但我同意@everyone在HTML中不允许嵌套表单
但是这件事可能都希望看到这一点
你可以破解的地方(我称之为黑客,因为我确定这不合法)html允许浏览器拥有嵌套形式
JS FIDDLE LINK
http://jsfiddle.net/nzkEw/10/
今天,我也遇到了同样的问题,解决了我添加了用户控件的问题
在这个控件上我使用这个代码
并在页面的PreRenderComplete事件中调用此方法
我相信这会有所帮助 .
在我知道我不应该这样做之前,我有嵌套表单,目的是有多个提交按钮 . 跑了18个月,成千上万的注册交易,没有人打电话给我们任何困难 .
嵌套表单为我提供了一个ID来解析正确的操作 . 没有打破'直到我试图将一个字段附加到其中一个按钮和Validate抱怨 . 解开它并不是什么大问题 - 我在外部表单上使用了明确的字符串化,因此提交和表单不匹配无关紧要 . 是的,是的,应该把按钮从提交到onclick .
关键是有些情况并没有完全打破 . 但“并非完全破碎”的标准可能太低了以下:-)
不,你不能有一个嵌套的表格 . 相反,您可以打开包含表单的Modal并执行Ajax表单提交 .