【问题标题】:How to change label styling on checkbox :checked如何更改复选框上的标签样式:已选中
【发布时间】:2020-02-25 16:36:25
【问题描述】:

我目前正在构建一个在标签内包含复选框的表单。我们这样做是因为我们需要将原始复选框交换为图像。但是,当复选框被选中时,我们需要让标签有一个边框来给一些用户反馈。

这是标签/复选框的设置

<div class="one_column">
    <label for="fieldname2_1_cb0">
      <input name="fieldname2_1[]" id="fieldname2_1_cb0" class="field depItem group  required" value="Alloy Wheel(s)" vt="Alloy Wheel(s)" type="checkbox"> <span>Alloy Wheel(s)</span>
    </label>
</div>

我们已经尝试过使用以下方法,但显然不起作用

label input[type="checkbox"]:checked + label {
border: 5px solid blue;
}

任何帮助将不胜感激!

我已经使用下面提供的代码成功完成了第一个复选框

    window.onload=function() {
  document.querySelector('input[type="checkbox"]').addEventListener('change', 
  function() {
      if (this.checked) {
      this.parentNode.classList.add('border-blue');
      } else {
        this.parentNode.classList.remove('border-blue');
      }
   })}

但是,它只改变了第一个复选框...总共有 10 个都遵循与上述相同的结构

【问题讨论】:

标签: javascript css forms checkbox


【解决方案1】:

使用 CSS,无法从子元素中选择父元素。

如果允许使用 JavaScript,可以这样解决:

document.querySelectorAll('input[type="checkbox"]').forEach(function(el) {
  el.addEventListener('change', function() {
    if (this.checked) {
      this.parentNode.classList.add('border-blue');
    } else {
      this.parentNode.classList.remove('border-blue');
    }
  })
})
.border-blue {
  border: 5px solid blue;
}

它将检查输入的变化。如果选中,将添加一个类。否则,该类将被删除。

【讨论】:

  • 我已经设法让第一个复选框使用我添加到问题中的代码来工作,但是,它只更改了第一个复选框,而不是其他复选框。有 10 个复选框都遵循与上述相同的结构,有什么想法吗?
  • 我编辑了答案。现在它适用于页面上的所有输入,
猜你喜欢
  • 2021-03-07
  • 2018-05-17
  • 2023-02-13
  • 1970-01-01
  • 2012-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多