我注意到如果你有几个无线电,你需要在所有无线电上使名称属性相同,以便无线电按预期工作:
<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>
无线电输入是唯一可以具有重复名称属性的输入类型(并且需要这样做)吗?如果我在任何其他输入上执行此操作,浏览器将认为它无效,对吧?
我问这个是因为我需要在脚本中处理这种情况,并且想知道在处理多个相同的名称时是否还应该考虑其他输入类型。
答案 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
服务器 应该正确地解析它,以便您可以同时获得buzz
和bar
值,但是我发现某些服务器端语言有怪癖来查询字符串解析。
如果密钥后缀为[]
,则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>
答案 6 :(得分:0)
多次使用时的某些元素名称或属性只会被HTML解析器忽略 例如,如果您使用多个ID,则仅考虑第一个。