如何用Javascript更改输入伪类?

时间:2015-04-19 09:09:42

标签: javascript css input pseudo-class

我正在尝试构建一个“单选按钮”选择样式列表,但实际上并没有使用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更改伪类,但我处理输入类型的情况让我感到困惑。

3 个答案:

答案 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)

这是一个纯粹的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);
}

继承人小提琴 - &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");
    }
})