你能嵌套html表单吗?

oyxsuwqo  于 2021-09-13  发布在  Java
关注(0)|答案(20)|浏览(604)

可以这样嵌套html表单吗

<form name="mainForm">
  <form name="subForm">
  </form>
</form>

这两种形式都有效吗?我的朋友在这方面有问题,这是问题的一部分 subForm 有效,但另一部分无效。

5kgi1eie

5kgi1eie1#

一个简单的解决方法是使用iframe保存“嵌套”表单。从视觉上看,表单是嵌套的,但在代码端,它完全位于一个单独的html文件中。

oogrdqng

oogrdqng2#

在我知道我不应该这样做之前,我有嵌套的表单,目的是有多个提交按钮。这样运行了18个月,数千次注册交易,没有人打电话告诉我们任何困难。
嵌套表单为我提供了一个要分析的id,以便采取正确的操作。直到我尝试在其中一个按钮上附加一个字段并验证它时才中断。解决这个问题没什么大不了的——我在外部表单上使用了显式的stringify,所以提交和表单不匹配并不重要。是的,是的,应该把按钮从提交改为点击。
关键是在某些情况下,它并没有完全被破坏。但“不完全破碎”的标准可能太低了,不值得追求:-)

jpfvwuh4

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);
    }

我相信这会有帮助。

kx1ctssn

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

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
      }
  }
});
7rfyedvj

7rfyedvj5#

不,您不能有嵌套表单。相反,您可以打开一个包含表单的模式并执行ajax表单提交。

qqrboqgw

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/

pcrecxhr

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是什么?一定有更好、更圆滑的工作。

gojuced7

gojuced78#

虽然我没有为嵌套表单提供解决方案(它不能可靠地工作),但我提供了一个适合我的解决方案:
使用场景:允许一次更改n个项目的超级表单。它在底部有一个“全部提交”按钮。每个项目都希望有自己的嵌套表单,并带有“SubmitItem#n”按钮。但是不能。。。
在这种情况下,实际上可以使用单个表单,然后使用按钮的名称 submit_1 .. submit_NsubmitAll 只需查看以 _1 如果按钮的名称是 submit_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>

好吧,这算不上什么发明,但它确实起到了作用。

sqxo8psd

sqxo8psd9#

即使你能让它在一个浏览器中工作,也不能保证它在所有浏览器中都能工作。所以,虽然你可以让它在某些时候发挥作用,但你肯定不能让它一直发挥作用。

dsf9zpds

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>
dnph8jn4

dnph8jn411#

总之,不可以。一个页面中可以有多个表单,但它们不应该嵌套。
从html5工作草案中:
4.10.3 form 要素
内容模型:
流动内容,但不包含表单元素子体。

nnt7mjpx

nnt7mjpx12#

您也可以在按钮标签内使用formaction=“”。

<button type="submit" formaction="/rmDog" method='post' id="rmDog">-</button>

这将作为一个单独的按钮嵌套在原始表单中。

vwkv1x7d

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规范中指定:)

w8ntj3qf

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帖子现在只有“主窗体”数据,而子窗体数据存储在另一个变量中,您可以随意操作。
希望这有帮助!

iecba09b

iecba09b15#

正如克雷格所说,没有。
但是,关于您对原因的评论:
使用1可能更容易 <form> 使用输入和“更新”按钮,并在另一个窗口中使用“提交订单”按钮复制隐藏输入 <form> .

相关问题