我有一个包含多个fieldset
的表单。每个fieldset
都有多个inputs
,其中一些会在逻辑上共享name
属性。
我查看MDN for input name和HTML 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
内重复。这有效吗?
答案 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=""
字段。