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)
服务器应该正确地解析它,以便你可以获得两者buzz和bar值,但是我发现一些服务器端语言在查询字符串解析时有怪癖.
如果密钥后缀为PHP,PHP特别会将密钥转换为数组[]:
?foo[]=buzz&foo[]=bar 会的 $_GET['foo'] = array('buzz', 'bar');
无线电输入是唯一可以具有重复名称属性的输入类型
不可以.任何表单控件都可以与任何其他表单控件共享名称.
这对于复选框特别有用(它允许您说"选择任意数量的这些",然后在服务器上循环结果,而不必为每个项目硬编码不同的名称.)并提交按钮(它可以让您告诉哪个点击一个没有循环所有可能的名称).
(并要求这样做)?
是.只有单选按钮才会根据共享名称获得特殊行为.