输入属性可以具有相同的“名称”

时间:2012-03-30 14:07:32

标签: javascript html forms input

我注意到如果你有几个无线电,你需要在所有无线电上使名称属性相同,以便无线电按预期工作:

  <label for="a1"><input type="radio" name="a" id="a1" value="1">1</label>
  <label for="a2"><input type="radio" name="a" id="a2" value="2">2</label>
  <label for="a3"><input type="radio" name="a" id="a3" value="3">3</label>
  <label for="a4"><input type="radio" name="a" id="a4" value="4">4</label>

无线电输入是唯一可以具有重复名称属性的输入类型(并且需要这样做)吗?如果我在任何其他输入上执行此操作,浏览器将认为它无效,对吧?

我问这个是因为我需要在脚本中处理这种情况,并且想知道在处理多个相同的名称时是否还应该考虑其他输入类型。

7 个答案:

答案 0 :(得分:12)

从用户互动的角度来看,input:radio元素使用相同的[name],以便浏览器知道一次只允许一个:checked

从表单提交的角度来看,任何元素都可以具有相同的名称,它们将被序列化为HTML Spec

中定义的查询字符串

以下是几个例子:

<form action="/foo/bar">
    <input type="hidden" name="fizz" value="buzz" />
    <input type="radio" name="foo" value="bar" />
    <input type="radio" name="foo" value="baz" />
    <input type="submit" value="Go" />
</form>

提交此表单(选中bar单选按钮)将生成以下查询字符串:

?fizz=buzz&foo=bar

但是,如果您将input:hidden元素的名称更改为foo

<form action="/foo/bar">
    <input type="hidden" name="foo" value="buzz" />
    <input type="radio" name="foo" value="bar" />
    <input type="radio" name="foo" value="baz" />
    <input type="submit" value="Go" />
</form>

查询字符串将是:

?foo=buzz&foo=bar

服务器 应该正确地解析它,以便您可以同时获得buzzbar值,但是我发现某些服务器端语言有怪癖来查询字符串解析。

如果密钥后缀为[],则PHP特别会将密钥转换为数组:

?foo[]=buzz&foo[]=bar$_GET['foo'] = array('buzz', 'bar');

答案 1 :(得分:9)

  

无线电输入是唯一可以具有重复名称属性的输入类型

没有。任何表单控件都可以与任何其他表单控件共享名称。

这对复选框特别有用(它允许您说“选择任意数量的这些”,然后在服务器上循环结果,而不必为每个项目硬编码不同的名称。)并提交按钮(它让你告诉哪一个被点击而没有遍历所有可能的名字。)

  

(并要求这样做)?

是。只有单选按钮才会根据共享名称获得特殊行为。

答案 2 :(得分:2)

页面上的名称属性具有相同的值是完全有效的。

复选框的常见后备是使用相同名称的隐藏输入,其值设置为false。当使用相同的名称值时,一定要仔细检查预期的输出,通常要解析的最新值将覆盖任何以前的同名参数。

如果您需要使用相同的名称对各个字段进行分组,您实际上可以创建一个包含多个元素的数组,例如:

<input name="list[]" />
<input name="list[]" />
<input name="list[]" />

答案 3 :(得分:1)

从技术上讲,重要的是生成的URL字符串。所以理论上你可以有两个同名的提交按钮......

答案 4 :(得分:1)

不,存在一些带有dup名称的其他控件;)

答案 5 :(得分:1)

您还可以拥有多个同名的隐藏输入。正如所指出的那样,服务器端框架将如何解析它们。在.NET MVC中,模型绑定器将在post操作方法的参数中查找相同名称的集合,或在post操作的view model参数上查找属性。例如List<int>List<Guid>List<string>

以身作则: https://stackoverflow.com/a/2013915/84206

答案 6 :(得分:0)

多次使用时的某些元素名称或属性只会被HTML解析器忽略 例如,如果您使用多个ID,则仅考虑第一个。

相关问题