我正在尝试构建一个“单选按钮”选择样式列表,但实际上并没有使用input type =“radio”。我的后端开发人员告诉我,我需要在特定情况下使用type =“checkbox”创建它。我相信这可以用JS来完成。 那么我怎样才能做到这一点,当1选项处于检查状态时,另一个选项是否使用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更改伪类,但我处理输入类型的情况让我感到困惑。
答案 0 :(得分:3)
如果checkbox
的sematics适用,为什么需要使用radio
执行此操作?可能有合理的原因,但不知道这一点,我建议你使用一个无线电组,它可以在没有任何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>
答案 1 :(得分:1)
如果您真的需要使用复选框执行此操作,您可以执行此操作:
<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>
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);
}
继承人小提琴 - &gt; https://jsfiddle.net/tL68Lsub/
答案 2 :(得分:0)
如果您真的需要复选框作为收音机,您可以使用:
$("input[type='checkbox']").click(function () {
if ($(this).is(":checked")) {
$("input[type='checkbox']").not(this).removeAttr("checked");
$(this).attr("checked", "true");
}
})