输入名称必须在同一表单中是唯一的吗?

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.这有效吗?

Rad*_*u T 6

不,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)