【发布时间】:2017-04-28 01:44:53
【问题描述】:
预期行为
我在 div 元素中有一个复选框。我希望 box 和 div 都是可点击的。
- 当用户单击复选框时,会向 div 添加一个类以更改其背景颜色。如果再次单击该复选框,则会删除此类。
- 当div本身被点击时,会根据需要添加或删除带有背景颜色的类复选框也可以勾选或取消勾选
目前,我使用纯 javascript 完成了大部分工作:
function boxPress(markNumber) {
var checkbox = "mark" + markNumber;
var element = document.getElementById(checkbox);
var markbox = "markbox" + markNumber;
if (element.getAttribute("checked") == null) {
element.setAttribute("checked", "checked");
document.getElementById(markbox).classList.add('checked');
} else {
element.removeAttribute("checked");
document.getElementById(markbox).classList.remove('checked');
}
}
.mark {
margin-bottom: 5px;
margin-top: 5px;
background-color: #FFFFFF;
border-width: 2px;
border-radius: 0px 5px 5px 0px;
border-left-style: solid;
border-left-width: 10px;
border-color: lime;
overflow: auto;
padding: 2%;
transition: background-color 0.5s linear 0s;
cursor: pointer;
}
.checked {
background-color: #66ff66;
}
.mark:hover {
background-color: #fffcaf;
}
.checked:hover {
background-color: #b3ffb3;
}
.flex-container {
display: -webkit-flex;
display: flex;
align-items: center;
margin: 0px;
padding: 0px;
}
.flex-mark {
width: 85%;
margin: 0px;
}
.flex-tick {
width: 15%;
margin: 0px;
text-align: center;
}
.flex-tick input {
width: 40px;
height: 40px;
}
<div class="mark col-12 col-m-6" id="markbox0" onclick="boxPress(0)">
<div class="flex-container">
<div class="flex-mark">
<p>Candidate introduces themself by first name, surname and role</p>
</div>
<div class="flex-tick"><input type="checkbox" id="mark0"></div>
</div>
</div>
这非常有效,除了用户首先与复选框交互,然后与 div 元素交互。
重现上述sn-p问题的步骤:
- 单击 div。背景发生变化,复选框被选中。
- 再次单击该 div。更改按预期反转。
- 单击复选框。应用背景更改。
- 再次单击复选框。更改按预期反转。
- 现在再次单击 div。背景发生变化,但复选框仍未选中
更有趣的是,复选框的 HTML 内容如下:
<input type="checkbox" id="mark0" checked="true">
但浏览器并未将框呈现为选中状态。
为什么会发生这种情况,为什么只有在单击框后单击 div 时才会出现问题?它发生在 Chrome 和 Edge 中。
【问题讨论】:
-
我无法在 Chrome 中重现该问题,它在
15cliks 之后按预期工作 -
因为
checked属性的值不应该是true,它应该是checked或者不存在。见the standard。 -
你有没有尝试调用复选框的 click() ?
-
或者您可以像
element.checked = true;一样将checked属性 设置为true 或false。见骗子:stackoverflow.com/q/18862149/215552
标签: javascript html checkbox