我正在尝试构建一个“单选按钮”选择样式列表,但实际上并不使用输入type=“单选”。我的后端开发人员建议我在我们的特定情况下需要使用type="checkbox“来创建它。我相信使用JS可以做到这一点。那么,当一个选项处于选中状态时,如何使用JS使另一个选项处于未选中状态?这是我到目前为止所知道的:
http://codepen.io/rjtkoh/pen/VLZrMo
<label for="toggle-1">
<input type="checkbox" id="toggle-1">
<div>option A</div>
</label>
<label for="toggle-2">
<input type="checkbox" id="toggle-2">
<div>option B</div>
</label>和CSS:
/* Checkbox Hack */
input[type=checkbox] {
position: absolute;
top: -9999px;
left: -9999px;
}
/* Default State */
div {
background: green;
width: 400px;
height: 100px;
line-height: 100px;
color: white;
text-align: center;
margin-bottom: 20px;
}
/* Toggled State */
input[type=checkbox]:checked ~ div {
background: red;
}我看过其他讨论通过JS更改伪类的线程,但我处理输入类型的情况让我感到困惑。
发布于 2015-04-19 17:22:32
如果语义适用于radio,为什么还需要使用checkbox执行此操作?可能有一个合理的原因,但在不知道这一点的情况下,我建议你使用一个无线组,它将在没有任何JavaScript的情况下工作,你只需要在两个输入上设置一个公共的name属性:
input[type=radio] {
position: absolute;
top: -9999px;
left: -9999px;
}
/* Default State */
div {
background: green;
width: 400px;
height: 100px;
line-height: 100px;
color: white;
text-align: center;
margin-bottom: 20px;
}
/* Toggled State */
input[type=radio]:checked + div {
background: red;
}<label for="toggle-1">
<input type="radio" name="option" id="toggle-1">
<div>option A</div>
</label>
<label for="toggle-2">
<input type="radio" name="option" id="toggle-2">
<div>option B</div>
</label>
发布于 2015-04-19 18:22:06
这是一个纯javascript的解决方案,因为我在你的问题中没有看到jQuery标签:
如果你真的需要用复选框来做这件事,你可以这样做:
html
<div id="radio_group">
<label for="toggle-1">
<input type="checkbox" id="toggle-1">
<div>option A</div>
</label>
<label for="toggle-2">
<input type="checkbox" id="toggle-2">
<div>option B</div>
</label>
</div>javascript
var options = document.getElementById('radio_group').childNodes;
var checkboxes = document.getElementsByTagName('input');
function uncheck() {
for (var i = 0; i < checkboxes.length; i++) {
if (checkboxes[i].type == 'checkbox') {
checkboxes[i].checked = '';
}
}
}
function checkBox(e) {
e.preventDefault();
if(e.target.nodeName == 'DIV') {
uncheck();
e.target.previousElementSibling.checked = 'checked';
}
}
for (var i = 0; i < options.length; i++) {
options[i].addEventListener('click', checkBox, false);
}这是一个难题--> https://jsfiddle.net/tL68Lsub/
发布于 2015-04-19 17:33:16
如果您确实需要将复选框用作无线功能,则可以使用:
$("input[type='checkbox']").click(function () {
if ($(this).is(":checked")) {
$("input[type='checkbox']").not(this).removeAttr("checked");
$(this).attr("checked", "true");
}
})https://stackoverflow.com/questions/29727902
复制相似问题