【发布时间】:2016-03-23 21:40:11
【问题描述】:
我在同一个页面上有两个表单,两个标签带有 for 属性,指向两个具有相同 ID 和名称的复选框。
当我单击第二个表单标签之一时,它会检查第一个表单复选框。
在这种情况下,问题在于当您单击“x 名称 2”标签时,它会检查“x 名称”复选框,即使它们采用不同的形式:
.customCheckbox div label {
padding: 5px;
background-color: white;
border: 2px solid #aaaaaa;
background-image: none;
}
.customCheckbox div input {
margin: 8px auto;
padding: 5px;
text-align: left;
margin-left: -999999px;
float: left;
}
.customCheckbox input[type=checkbox]:checked ~ label,
.customCheckbox input[type=radio]:checked ~ label {
background-color: #117399;
color: #eeeeee;
}
.customCheckbox input[type=radio]:checked ~ label {
background-color: #117399;
color: #eeeeee;
}
<form style="margin:30px;">
<div class="customCheckbox">
<div>
<input id="x" name="x" type="checkbox"/><label for="x">x name</label>
</div>
<br/>
<div>
<input id="y" name="y" type="checkbox"/> <label for="y">y name</label>
</div>
</div>
</form>
<form style="margin:30px;">
<div class="customCheckbox">
<div>
<input id="x" name="x" type="checkbox"/><label for="x">x name 2</label>
</div>
<br/>
<div>
<input id="y" name="y" type="checkbox"/> <label for="y">y name 2</label>
</div>
</div>
</form>
- 我不想重命名元素(因为有很多地方会发生这种情况)
- 我想尽量远离 JavaScript(如果可能的话)
- 由于我使用 CSS 来设置标签和复选框的样式,因此我无法将复选框嵌套在标签内(因为您无法在 CSS 中设置父元素的样式)
【问题讨论】:
-
HTML id 应该是唯一的。如果没有,就会发生这样的事情。
-
重复 ID 在 html 中是非法的。您的代码正在做的是正确的行为 - 处理文档中找到的第一个 id,并忽略其余部分(骗子)。阅读 getElementById() 的文档。它返回一个 DOM 节点,而不是 dom 节点列表,因为 id 不能重复。如果可以,那么该函数必须正确命名为 getElementsById。
标签: javascript html css forms