可以有多个同名的HTML表单吗?

Is it OK to have multiple HTML forms with the same name?

提问人:Nate 提问时间:6/20/2012 更新时间:12/3/2014 访问量:43484

问:

我想这样做是有正当理由的,但这是一个很长的故事,所以我会忘记试图解释为什么,只是问是否可以这样做。

我有一个页面,我需要有多个同名的表单,但我只想提交其提交按钮为单击的表单。例如,我的页面上可能包含以下内容:

<form name="input" action="" method="get">
Username: <input type="text" name="user" />
<input type="submit" value="Submit" />
</form>

text

<form name="input" action="" method="get">
Username: <input type="text" name="user" />
<input type="submit" value="Submit" />
</form>

text

<form name="input" action="" method="get">
Username: <input type="text" name="user" />
<input type="submit" value="Submit" />
</form>

这是可以接受的吗?

HTML 表单

评论

0赞 Albert Wiersch 8/2/2013
onlinewebcheck.com 检测 HTML5 文档中的重复表单名称错误
0赞 Ciro Santilli OurBigBook.com 6/1/2016
为什么要使用:stackoverflow.com/questions/8946320/...form name

答:

11赞 secretformula 6/20/2012 #1

是的,这是允许的,只有 必须是唯一的。然而,我不建议这样做,为什么还要让自己在路上感到困惑。id

该属性仅定义每个表单字段元素在发送到服务器时将表示的内容。name

评论

8赞 Jukka K. Korpela 6/20/2012
元素的属性不会影响发送到服务器的数据。您可能将其与表单字段的属性混淆了。nameformname
0赞 Erenor Paz 6/20/2012 #2

当用户单击提交按钮时,只有该表单才会生效。不过,最好给它们命名,这样你就不会混淆:)

23赞 Jukka K. Korpela 6/20/2012 #3

关于 HTML 4.01 规范,您可以使用具有相同属性的元素,因为它们没有唯一性要求。但是,这样做会破坏这些属性的目的。它们旨在使在客户端脚本中引用表单变得更加容易:如果有,则引用该表单。formname<form name=foo>document.foo

当使用相同的属性时会发生什么是不确定的,但浏览器似乎所做的是返回一个数组。在您的示例中,将是一个 3 元素数组,第一种形式。但这没有用,因为(假设文档中没有其他形式)您可以使用具有明确定义含义的 。namedocument.foodocument.foo[0]document.forms[0]

对于元素来说,属性本身已经过时了(但对于表单字段来说却不是,在表单字段中它仍然是必不可少的)。表单上的 HTML 4.01 规范子句说:nameform

“ = cdata [CI] 此属性为元素命名,以便可以从样式表或脚本中引用该元素。小说为了向后兼容,已包含此属性。应用程序应使用该属性来标识元素。nameid

在 HTML5 草案中,即使是正式规则也不允许使用相同的属性。表单name 属性的 HTML5 子句表示,其值“在它所在的集合中的元素中必须是唯一的,如果有的话”。这是一个令人困惑的表述,但最安全的做法是假设它在文档的元素中必须是唯一的。nameformformsform

评论

0赞 Alohci 6/20/2012
关于 document.foo 的多匹配名称情况未定义,这难道不是从 dev.w3.org/html5/spec/dom.html#dom-document-namedItem-which 到 3.1.4 末尾的 3.1.4 DOM 树访问器部分所定义的吗?
0赞 Jukka K. Korpela 6/20/2012
@Alohci,它在当前规范中未定义。HTML5 草案为此定义了一种机制,但它也提出了唯一性要求。
0赞 Alohci 6/20/2012
是的,公平点。讨论什么是 HTML 4、什么是 HTML5 以及用户代理做什么,因为它们没有单独的 HTML 4 和 HTML5 模式,有时会变得非常复杂。
1赞 Rafael Kutscha 12/3/2014 #4

在 HTML5 中也可以。只有名称在表单本身中必须是唯一的。

请参阅文档:“该值不能是空字符串,并且该值在它所在的表单集合中的表单元素中必须是唯一的(如果有)。

评论

1赞 Quoting Eddie 4/13/2016
这可能具有误导性。在 HTML5 中,W3C 要求单在表单集合中是唯一的(如果有的话)。但是,形式中的元素可以是除 _charset_isindex 之外的任何非空字符串namename