0

我有这样的嵌套表单标签

<form>
    <h5>Main Form</h5>
    <input type="text" />

    <!-- Don't Show This Form -->
    <form style="display:none">
        <input type="text" />
        <input type="text" />
    </form>

    <!-- Don't Show This Form -->
    <form style="display:none">
        <input type="text" />
        <input type="text" />
    </form>

</form>

问题是第一个显示的表单,虽然它是 display none css inline

查看实际代码http://jsfiddle.net/fZMKB/

我知道我知道,嵌套表格是违反规则的,但我必须以这种方式使用它,因为这个原因

我需要在 jQuery 事件之前重置一堆输入和表单元素,我正在使用这段代码

    $('form').get(0).reset();

从这个我之前的问题How to reset forms elements (input,select,textarea, etc.) on events using jQuery

所以我使用表单标签的唯一原因是我需要重置输入和文本区域等。

4

3 回答 3

3

嵌套表单从来都不是一个很好的理由。相反,使用正确的 HTML 语法并相应地调整您的 jQuery 代码。下面是一些有效的 HTML 标记:

HTML

<form>
  <h5>Main Form</h5>
  <input type="text">
  <div class="one" style="display:none">
    <input type="text">
    <input type="text">
  </div>
  <div class="two" style="display:none">
    <input type="text">
    <input type="text">
  </div>
</form>

假设您要重置第一小节中的所有文本输入、复选框、单选按钮和选择菜单。这只需要两行简单的 jQuery:

$(".one input, .one select").val("");
$(".one textarea").html("");

如果要恢复默认值,则应使用data属性将值存储在 HTML 标记中。这是一个例子:http: //jsfiddle.net/pgNrF/3/

于 2013-08-27T07:44:33.017 回答
0

不,嵌套形式是被禁止的。

这在 HTML 4.01 DTD 中表示为:

<!ELEMENT FORM - - (%block;|SCRIPT)+ -(FORM) -- interactive form -->

http://www.w3.org/TR/html4/interact/forms.html#h-17.3

一个 FORM 有一个强制的开始标签,强制的结束标签,并且可以包含 %block 或 SCRIPT 中的任何内容,除了其他 FORM。

XML DTD 不像 SGML DTD 那样具有表现力,因此在 XHTML 中,这条规则仅在规范的人类可读文本中指定:

form 不得包含其他表单元素。

http://www.w3.org/TR/xhtml1/#prohibitions

HTML 5 不是 SGML 应用程序,也没有官方机器可读的语言描述。它还在文本中表达了这个规则:

内容模型:

流式内容,但没有表单元素后代。

http://www.w3.org/TR/html5/forms.html#the-form-element

参考

于 2013-08-27T07:36:48.173 回答
0

你不能在 HTML 中嵌套表单,你可以有不同的表单但不能嵌套

请参阅此 http://www.w3.org/TR/2011/WD-html5-20110525/forms.html#the-form-element

Content model
Flow content, but with no form element descendants.
于 2013-08-27T07:50:39.757 回答