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

时间:2014-08-18 13:47:41

标签: html5 forms fieldset

我有一个包含多个fieldset的表单。每个fieldset都有多个inputs,其中一些会在逻辑上共享name属性。

我查看MDN for input nameHTML 5 spec没有运气。 HTML 5表单规范的第4.10.19.1节没有提到唯一性要求。

例如:

<fieldset name="attendee"> 
  <input name="full-name">
</fieldset> 

<fieldset name="next-of-kin"> 
  <input name="full-name">
</fieldset>

每个input名称在fieldset中都是唯一的,但在form内重复。这有效吗?

3 个答案:

答案 0 :(得分:5)

不,name属性不必是唯一的。你可以在多个输入字段中使用相同的name属性(例如,单选按钮背后的整个原理)。当您提交表单时,现代浏览器通常会看到一系列信息。我将举一个例子,其中我使用PHP来解析信息,但重点在于其他编程语言。

举个例子:

<fieldset name="attendee"> 
  <input name="full-name">
</fieldset> 

<fieldset name="next-of-kin"> 
  <input name="full-name">
</fieldset>

如果您var_dump()取决于您的POST / GET方法,您将看到浏览器实际上只记住full-name属性记录的最后一个值。基本上,如果您的第一个输入是John Doe(在attendee字段集下),而您的第二个输入是John Green(在next-of-kin字段集下),则浏览器只会记住{{1无论你的方法如何。如果您使用GET方法,则您的网址将包含John Green个属性,但不包含实际的full-name数组本身。

如果要记录这两个名称,可以编辑代码:

$_GET

通过使用<fieldset name="attendee"> <input name="full-name[]"> </fieldset> <fieldset name="next-of-kin"> <input name="full-name[]"> </fieldset> ,浏览器知道不要只记住该属性的最后一个值。现在,无论您使用哪种方法{@ 1}},都应该看到:

[]

如果您想要更具体(因为在其中一条评论中您提到您在REST API中使用它),您可以像这样编辑代码:

var_dump()

现在,如果您提交表单,无论采用何种方法,您都将获得以下数据结构:

array(1) { ["full-name"]=> array(2) { 
                          [0]=> string(8) "John Doe" 
                          [1]=> string(10) "John Green" 
                          } 
         }

从这里调用此数组上的<fieldset name="attendee"> <input name="full-name[attendee]"> </fieldset> <fieldset name="next-of-kin"> <input name="full-name[next-of-kin]"> </fieldset> 并获得一个可以与API一起使用的实际JSON对象(如下图所示)非常简单:

array(1) { ["full-name"]=> array(2) { 
                          ["attendee"]=> string(8) "John Doe" 
                          ["next-of-kin"]=> string(10) "John Green" 
                          } 
         }

答案 1 :(得分:0)

如果您计划使用ID选择器(javascript或Jquery)操作这些字段,并且您希望将功能保持分离,那么我将使用唯一ID。如果您打算选择元素,则指定id标签会更好。

<fieldset id="attendeeMain" name="attendee"> 
<input name="full-name">
</fieldset> 

<fieldset id="nextOfKin" name="next-of-kin"> 
 input name="full-name">
</fieldset>

答案 2 :(得分:0)

我建议给每个字段指定一个不同的名称,

例如,如果您有两个字段,使用GET方法,URL中的名称/值对将如下所示:

index.html的与会者=随机&安培;的全名= random2 &安培;下一个的亲属= random3&安培;的全名= random4

代码:

<fieldset name="attendee"> 
  <input name="full-name">
</fieldset> 

<fieldset name="next-of-kin"> 
  <input name="full-name">
</fieldset>

那么哪些数据将被加载到后端,如果它们被调用的标识符相同但数据不同?

如果您没有后端,并且只使用名称字段作为选择器,我建议您使用class=""字段。