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

Ale*_*lex 11 html javascript 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>
Run Code Online (Sandbox Code Playgroud)

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

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

zzz*_*Bov 12

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

从表单提交的角度来看,任何元素都可以具有相同的名称,它们将被序列化为HTML规范中定义的查询字符串

以下是几个例子:

<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>
Run Code Online (Sandbox Code Playgroud)

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

?fizz=buzz&foo=bar
Run Code Online (Sandbox Code Playgroud)

但是,如果将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>
Run Code Online (Sandbox Code Playgroud)

查询字符串将是:

?foo=buzz&foo=bar
Run Code Online (Sandbox Code Playgroud)

服务器应该正确地解析它,以便你可以获得两者buzzbar值,但是我发现一些服务器端语言在查询字符串解析时有怪癖.

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

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


Que*_*tin 9

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

不可以.任何表单控件都可以与任何其他表单控件共享名称.

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

(并要求这样做)?

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