可以这样嵌套html表单吗
<form name="mainForm"> <form name="subForm"> </form> </form>
这两种形式都有效吗?我的朋友在这方面有问题,这是问题的一部分 subForm 有效,但另一部分无效。
subForm
5kgi1eie1#
一个简单的解决方法是使用iframe保存“嵌套”表单。从视觉上看,表单是嵌套的,但在代码端,它完全位于一个单独的html文件中。
oogrdqng2#
在我知道我不应该这样做之前,我有嵌套的表单,目的是有多个提交按钮。这样运行了18个月,数千次注册交易,没有人打电话告诉我们任何困难。嵌套表单为我提供了一个要分析的id,以便采取正确的操作。直到我尝试在其中一个按钮上附加一个字段并验证它时才中断。解决这个问题没什么大不了的——我在外部表单上使用了显式的stringify,所以提交和表单不匹配并不重要。是的,是的,应该把按钮从提交改为点击。关键是在某些情况下,它并没有完全被破坏。但“不完全破碎”的标准可能太低了,不值得追求:-)
jpfvwuh43#
今天,我也遇到了同样的问题,解决了这个问题,我添加了一个用户控件和在这个控件上,我使用这个代码
<div class="divformTagEx"> </div> <asp:Literal runat="server" ID="litFormTag" Visible="false"> '<div> <form style="margin-bottom: 3;" action="http://login.php" method="post" name="testformtag"></form> </div>'</asp:Literal>
并在页面的prerendercomplete事件上调用此方法
private void InitializeJavaScript() { var script = new StringBuilder(); script.Append("$(document).ready(function () {"); script.Append("$('.divformTagEx').append( "); script.Append(litFormTag.Text); script.Append(" )"); script.Append(" });"); ScriptManager.RegisterStartupScript(this, GetType(), "nestedFormTagEx", script.ToString(), true); }
我相信这会有帮助。
kx1ctssn4#
真的不可能。。。我无法嵌套表单标签。。。但是,我使用了以下代码:
<form> OTHER FORM STUFF <div novalidate role="form" method="post" id="fake_form_id_0" data-url="YOUR_POST_URL"> THIS FORM STUFF </div> </form>
具有 {% csrf_token %} 诸如此类并应用了一些js
{% csrf_token %}
var url = $(form_id).attr("data-url"); $.ajax({ url: url, "type": "POST", "data": { 'csrfmiddlewaretoken': '{{ csrf_token }}', 'custom-param-attachment': 'value' }, success: function (e, data) { if (e.is_valid) { DO STUFF } } });
7rfyedvj5#
不,您不能有嵌套表单。相反,您可以打开一个包含表单的模式并执行ajax表单提交。
qqrboqgw6#
尽管这个问题已经很老了,我同意@everyone的观点,html中不允许嵌套表单但这可能是所有人都想看到的在这里,您可以破解(我称之为破解,因为我确信这是不合法的)html以允许浏览器具有嵌套表单
<form id="form_one" action="http://apple.com"> <div> <div> <form id="form_two" action="/"> <!-- DUMMY FORM TO ALLOW BROWSER TO ACCEPT NESTED FORM --> </form> </div> <br/> <div> <form id="form_three" action="http://www.linuxtopia.org/"> <input type='submit' value='LINUX TOPIA'/> </form> </div> <br/> <div> <form id="form_four" action="http://bing.com"> <input type='submit' value='BING'/> </form> </div> <br/> <input type='submit' value='Apple'/> </div> </form>
js小提琴链接http://jsfiddle.net/nzkew/10/
pcrecxhr7#
关于嵌套表单:有一天下午,我花了10年时间调试ajax脚本。对不起,我之前的回答/示例没有说明html标记。
<form id='form_1' et al> <input stuff> <submit onClick='ajaxFunction(That_Puts_form_2_In_The_ajaxContainer)' > <td id='ajaxContainer></td> </form>
表单2不断失败,表示表单2无效。当我移动生成表单2的ajaxcontainer时 <i>outside</i> 在1年级的时候,我又开始做生意了。它回答了为什么人们会嵌套表单的问题。我的意思是,真的,如果不定义要使用的表单,id是什么?一定有更好、更圆滑的工作。
<i>outside</i>
gojuced78#
虽然我没有为嵌套表单提供解决方案(它不能可靠地工作),但我提供了一个适合我的解决方案:使用场景:允许一次更改n个项目的超级表单。它在底部有一个“全部提交”按钮。每个项目都希望有自己的嵌套表单,并带有“SubmitItem#n”按钮。但是不能。。。在这种情况下,实际上可以使用单个表单,然后使用按钮的名称 submit_1 .. submit_N 及 submitAll 只需查看以 _1 如果按钮的名称是 submit_1 .
submit_1
submit_N
submitAll
_1
<form> <div id="item1"> <input type="text" name="foo_1" value="23"> <input type="submit" name="submit_1" value="Submit Item #1"> </div> <div id="item2"> <input type="text" name="foo_2" value="33"> <input type="submit" name="submit_2" value="Submit Item #2"> </div> <input type="submit" name="submitAll" value="Submit All Items"> </form>
好吧,这算不上什么发明,但它确实起到了作用。
sqxo8psd9#
即使你能让它在一个浏览器中工作,也不能保证它在所有浏览器中都能工作。所以,虽然你可以让它在某些时候发挥作用,但你肯定不能让它一直发挥作用。
dsf9zpds10#
在嵌套表单之前使用空表单标记在firefox和chrome上测试和工作没有测试,即。
<form name="mainForm" action="mainAction"> <form></form> <form name="subForm" action="subAction"> </form> </form>
@adusza编辑:正如评论员指出的,上面的代码不会产生嵌套形式。但是,如果像下面这样添加div元素,mainform中会有子表单,第一个空白表单将被删除。
<form name="mainForm" action="mainAction"> <div> <form></form> <form name="subForm" action="subAction"> </form> </div> </form>
dnph8jn411#
总之,不可以。一个页面中可以有多个表单,但它们不应该嵌套。从html5工作草案中:4.10.3 form 要素内容模型:流动内容,但不包含表单元素子体。
form
nnt7mjpx12#
您也可以在按钮标签内使用formaction=“”。
<button type="submit" formaction="/rmDog" method='post' id="rmDog">-</button>
这将作为一个单独的按钮嵌套在原始表单中。
vwkv1x7d13#
注意:不允许嵌套表单元素!http://www.w3.org/markup/html3/forms.htmlhttps://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-控件和表单注解中的“此功能允许作者解决嵌套表单元素缺乏支持的问题”。但没有引用指定的位置,我认为他们假设我们应该假设它在html3规范中指定:)
w8ntj3qf14#
另一种解决此问题的方法是,如果您使用的是允许您操作发布数据的服务器端脚本语言,则如下所示声明html表单:
<form> <input name="a_name"/> <input name="a_second_name"/> <input name="subform[another_name]"/> <input name="subform[another_second_name]"/> </form>
如果您打印发布的数据(我将在这里使用php),您将得到如下数组:
//print_r($_POST) will output : array( 'a_name' => 'a_name_value', 'a_second_name' => 'a_second_name_value', 'subform' => array( 'another_name' => 'a_name_value', 'another_second_name' => 'another_second_name_value', ), );
然后你可以做一些类似的事情:
$my_sub_form_data = $_POST['subform']; unset($_POST['subform']);
您的$\u帖子现在只有“主窗体”数据,而子窗体数据存储在另一个变量中,您可以随意操作。希望这有帮助!
iecba09b15#
正如克雷格所说,没有。但是,关于您对原因的评论:使用1可能更容易 <form> 使用输入和“更新”按钮,并在另一个窗口中使用“提交订单”按钮复制隐藏输入 <form> .
<form>
20条答案
按热度按时间5kgi1eie1#
一个简单的解决方法是使用iframe保存“嵌套”表单。从视觉上看,表单是嵌套的,但在代码端,它完全位于一个单独的html文件中。
oogrdqng2#
在我知道我不应该这样做之前,我有嵌套的表单,目的是有多个提交按钮。这样运行了18个月,数千次注册交易,没有人打电话告诉我们任何困难。
嵌套表单为我提供了一个要分析的id,以便采取正确的操作。直到我尝试在其中一个按钮上附加一个字段并验证它时才中断。解决这个问题没什么大不了的——我在外部表单上使用了显式的stringify,所以提交和表单不匹配并不重要。是的,是的,应该把按钮从提交改为点击。
关键是在某些情况下,它并没有完全被破坏。但“不完全破碎”的标准可能太低了,不值得追求:-)
jpfvwuh43#
今天,我也遇到了同样的问题,解决了这个问题,我添加了一个用户控件和
在这个控件上,我使用这个代码
并在页面的prerendercomplete事件上调用此方法
我相信这会有帮助。
kx1ctssn4#
真的不可能。。。我无法嵌套表单标签。。。但是,我使用了以下代码:
具有
{% csrf_token %}
诸如此类并应用了一些js
7rfyedvj5#
不,您不能有嵌套表单。相反,您可以打开一个包含表单的模式并执行ajax表单提交。
qqrboqgw6#
尽管这个问题已经很老了,我同意@everyone的观点,html中不允许嵌套表单
但这可能是所有人都想看到的
在这里,您可以破解(我称之为破解,因为我确信这是不合法的)html以允许浏览器具有嵌套表单
js小提琴链接
http://jsfiddle.net/nzkew/10/
pcrecxhr7#
关于嵌套表单:有一天下午,我花了10年时间调试ajax脚本。
对不起,我之前的回答/示例没有说明html标记。
表单2不断失败,表示表单2无效。
当我移动生成表单2的ajaxcontainer时
<i>outside</i>
在1年级的时候,我又开始做生意了。它回答了为什么人们会嵌套表单的问题。我的意思是,真的,如果不定义要使用的表单,id是什么?一定有更好、更圆滑的工作。gojuced78#
虽然我没有为嵌套表单提供解决方案(它不能可靠地工作),但我提供了一个适合我的解决方案:
使用场景:允许一次更改n个项目的超级表单。它在底部有一个“全部提交”按钮。每个项目都希望有自己的嵌套表单,并带有“SubmitItem#n”按钮。但是不能。。。
在这种情况下,实际上可以使用单个表单,然后使用按钮的名称
submit_1
..submit_N
及submitAll
只需查看以_1
如果按钮的名称是submit_1
.好吧,这算不上什么发明,但它确实起到了作用。
sqxo8psd9#
即使你能让它在一个浏览器中工作,也不能保证它在所有浏览器中都能工作。所以,虽然你可以让它在某些时候发挥作用,但你肯定不能让它一直发挥作用。
dsf9zpds10#
在嵌套表单之前使用空表单标记
在firefox和chrome上测试和工作
没有测试,即。
@adusza编辑:正如评论员指出的,上面的代码不会产生嵌套形式。但是,如果像下面这样添加div元素,mainform中会有子表单,第一个空白表单将被删除。
dnph8jn411#
总之,不可以。一个页面中可以有多个表单,但它们不应该嵌套。
从html5工作草案中:
4.10.3
form
要素内容模型:
流动内容,但不包含表单元素子体。
nnt7mjpx12#
您也可以在按钮标签内使用formaction=“”。
这将作为一个单独的按钮嵌套在原始表单中。
vwkv1x7d13#
注意:不允许嵌套表单元素!
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-控件和表单注解中的“此功能允许作者解决嵌套表单元素缺乏支持的问题”。但没有引用指定的位置,我认为他们假设我们应该假设它在html3规范中指定:)
w8ntj3qf14#
另一种解决此问题的方法是,如果您使用的是允许您操作发布数据的服务器端脚本语言,则如下所示声明html表单:
如果您打印发布的数据(我将在这里使用php),您将得到如下数组:
然后你可以做一些类似的事情:
您的$\u帖子现在只有“主窗体”数据,而子窗体数据存储在另一个变量中,您可以随意操作。
希望这有帮助!
iecba09b15#
正如克雷格所说,没有。
但是,关于您对原因的评论:
使用1可能更容易
<form>
使用输入和“更新”按钮,并在另一个窗口中使用“提交订单”按钮复制隐藏输入<form>
.