mik*_*ana 2 forms html5 fieldset
我有一个多个fieldsets 的表单.每个fieldset都有多个inputs,其中一些逻辑上共享一个name属性.
我已经在MDN上查看输入名称和HTML 5规范但没有运气.HTML 5表单规范的第4.10.19.1节没有提到唯一性要求.
例如:
<fieldset name="attendee">
<input name="full-name">
</fieldset>
<fieldset name="next-of-kin">
<input name="full-name">
</fieldset>
Run Code Online (Sandbox Code Playgroud)
每个input名称都是唯一的fieldset,但在内部重复form.这有效吗?
不,name属性不需要是唯一的.你可以在多个输入字段中使用相同的name属性(例如,单选按钮背后的整个原理).当您提交表单时,现代浏览器通常会看到一系列信息.我将举一个例子,其中我使用PHP来解析信息,但重点在于其他编程语言.
举个例子:
<fieldset name="attendee">
<input name="full-name">
</fieldset>
<fieldset name="next-of-kin">
<input name="full-name">
</fieldset>
Run Code Online (Sandbox Code Playgroud)
如果您var_dump()依赖于POST/GET方法,您将看到浏览器实际上只记住full-name属性记录的最后一个值.基本上,如果您的第一个输入是John Doe(在attendee字段集下)而您的第二个输入是John Green(在next-of-kin字段集下),浏览器将只记住John Green您的方法.如果使用GET方法,则只有URL包含两个full-name属性,而不包含实际的$_GET数组本身.
如果要记录这两个名称,可以将代码编辑为:
<fieldset name="attendee">
<input name="full-name[]">
</fieldset>
<fieldset name="next-of-kin">
<input name="full-name[]">
</fieldset>
Run Code Online (Sandbox Code Playgroud)
通过使用[]浏览器知道不要只记住该属性的最后一个值.现在如果你做了一个var_dump()不管你的方法,你应该看到:
array(1) { ["full-name"]=> array(2) {
[0]=> string(8) "John Doe"
[1]=> string(10) "John Green"
}
}
Run Code Online (Sandbox Code Playgroud)
如果您想要更具体(因为在其中一条评论中提到您在REST API中使用它),您可以像这样编辑代码:
<fieldset name="attendee">
<input name="full-name[attendee]">
</fieldset>
<fieldset name="next-of-kin">
<input name="full-name[next-of-kin]">
</fieldset>
Run Code Online (Sandbox Code Playgroud)
现在,如果您提交表单,无论方法如何,您将获得以下数据结构:
array(1) { ["full-name"]=> array(2) {
["attendee"]=> string(8) "John Doe"
["next-of-kin"]=> string(10) "John Green"
}
}
Run Code Online (Sandbox Code Playgroud)
从这里调用json_encode()这个数组并获得一个可以与API一起使用的实际JSON对象(如下图所示)非常简单:
{"full-name":{"attendee":"John Doe","next-of-kin":"John Green"}}
Run Code Online (Sandbox Code Playgroud)