具有相同名称的两个输入元素是否有效?


Answers:


60

是的,这是有效的

这很好

<form name="form1">
  <input type="hidden" name="url" value="1">
</form>

<form name="form2">
  <input type="hidden" name="url" value="2">
</form>

这也很好,通常将其解释为值的数组,例如{url: [1, 2]},取决于服务器的功能。在URL编码中,它将类似于url=1&url=2

<form name="form1">
  <input type="hidden" name="url" value="1">
  <input type="hidden" name="url" value="2">
</form>

28
是有效的。它将不会引起服务器端语言的混乱(即使PHP,其共享名称的命名字段约定,也将一致且可预测地处理不使用该约定的多个输入)。它将不会对JavaScript造成混乱(它将元素显示为一个集合,并且不会忽略其中之一)。对于可能不知道自己在做什么的编写代码的作者,它可能会造成混乱,但是按规范来说,这是可以的。
昆汀2010年

@David Dorward:感谢您的解释,我删除了该部分。

14
该帖子具有误导性。具有相同名称和相同格式的输入是HTML标准的一部分-例如,用于复选框。
beldaz

1
在同一个表单中放置多个具有相同名称的输入(隐藏或其他)是有效的。此外,它在提交结构化列表或关联地图时非常有用,并且通常比骇客的DIY序列化更简洁(且更不易碎)。
candu

1
我知道这是一篇旧文章,但有一点需要澄清。PHP需要您告诉它元素正在形成一个数组,如下所示:<code> <input type =“ hidden” name =“ url []” value = ....... </ code>为此,php将获取last字段的最后一个值,并将其插入到键“ url”的表单数组中。
Mark

12

是。

此外,如果要处理单选按钮组,这是至关重要的。


究竟。或者使用复选框,在这种情况下,您可以将[]放在“ url []”的末尾,并创建一个要拾取的数组。
凯里·琼斯

2
@Kerry —那是PHPism。大多数表单处理库都非常高兴没有控件组的特殊名称。
昆汀

8

在我所知道的每个浏览器上,“这都是不好的”解析;如果在url编码的字符串中出现两个url,则将其视为一个数组。在JQuery中尝试以下操作:

$('<form name="form1">\
     <input type="hidden" name="url" value="1">\
     <input type="hidden" name="url" value="2">\
</form>').serialize()

您将获得: "url=1&url=2"

编写良好的查询字符串解析器将返回如下的json结构:

 {"url":["1", "2"]}

严格规范吗?不会,但是如上所述,通过反斜杠转义EOL都不能创建多行字符串。


6

是的-每个人只会提交各自的表格。

如果您使用相同的格式,则其中一个将覆盖另一个,并且无效。

编辑:正如Mahmoodvcs所指出的那样,重写仅在某些语言(如PHP)中发生,而HTML本身并不固有。


12
你错了。如果您有多个具有相同名称的输入,则一个不会覆盖另一个。所有输入将按照它们在html中出现的顺序追加到请求的正文中。它是有效的:具有多个同名隐藏控件元素的HTML表单
Mahmoodvcs 2015年

5
@Mahmoodvcs:严格来说,这不是真的。如果将表单发布到PHP服务,则最后一个值将获胜。如果要为一个名称分配多个值,则每个名称必须以“ []”结尾。
杰夫·洛里

6
我们在这里谈论的是HTML,而不是PHP。
Mahmoodvcs 2015年

2
@yardpenalty-我不明白您的问题(不确定Jeff是否会回答),但是如果您在质疑PHP的能力,那肯定是对的(至少在PHP7之前–我尚未检查它们是否已更改)这还)
凯瑞·琼斯

对不起,我知道了。如果要使用php进行处理,则必须创建名称数组。我认为是需要单选按钮具有相同名称或其他名称的引导程序。无论如何,是的,您可以。
yardpenalty.com '16


2

A)您的第一个示例是可以的,因为提交表单的时间会有所不同:

<form id="1">
    <input type="hidden" name="url" value="1">  
</form>
<form id="2">
    <input type="hidden" name="url" value="2">  
</form>

B)您的第二个示例也可以,但是不是标准的编码实践:

<form>
    <input type="hidden" name="url" value="1">  
    <input type="hidden" name="url" value="2">  
</form>

Java代码二提取两个值:

Map<String,String[]> parmMap = requestObj.getParameterMap();   
String input1 = parmMap.get("url")[0];   
String input2 = parmMap.get("url")[1];
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.