js html css实现复选框全选与反选

下面我将分以下几个方面来讲解如何使用 HTML、CSS 和 JavaScript 实现复选框的全选与反选功能:

HTML 结构

首先需要在 HTML 中设置一些结构,使用 <input> 标签创建一个父复选框和一些子复选框。比如下面是一个简单的实现:

<input type="checkbox" id="parentBox" onchange="checkAll()" >全选

<input type="checkbox" id="childBox1" class="childBox">选项1
<input type="checkbox" id="childBox2" class="childBox">选项2
<input type="checkbox" id="childBox3" class="childBox">选项3

以上代码中,我们创建了一个 id 为 parentBox 的父复选框和三个 class 为 childBox 的子复选框。其中,父复选框的 onchange 事件绑定了名为 checkAll() 的函数。子复选框则可以通过 class 选择器选择,便于后续的操作。

JavaScript 实现全选和反选功能

在 JavaScript 中,我们可以通过获取父复选框的 checked 状态并将其赋值给所有子复选框,实现全选的功能。代码如下:

function checkAll() {
  var parentBox = document.getElementById("parentBox");
  var childBoxs = document.getElementsByClassName("childBox");
  for(var i = 0; i < childBoxs.length; i++) {
    childBoxs[i].checked = parentBox.checked;
  }
}

以上代码中,我们首先获取名为 parentBox 的元素和所有类名为 childBox 的元素。接着,我们通过 for 循环将父复选框的 checked 状态赋值给所有的子复选框。

反选功能则比较简单,只需要在每次点击一个子复选框后,重新计算全部子复选框的 checked 状态,并将结果赋给父复选框即可。代码如下:

function checkSingle () {
  var parentBox = document.getElementById("parentBox");
  var childBoxs = document.getElementsByClassName("childBox");
  var count = 0;
  for(var i = 0; i < childBoxs.length; i++) {
    if(childBoxs[i].checked === true) {
      count++;
    }
  }
  if(count === childBoxs.length) {
    parentBox.checked = true;
  } else {
    parentBox.checked = false;
  }
}

以上代码中,通过一个名为 checkSingle() 的函数实现反选的功能。我们首先获取所有子复选框的元素。 接着我们在一个 for 循环中,检查当前所有的子复选框,判断它们的 checked 状态是否为 true。如果是,则将 count 加 1。最后,判断 parentBox 是否应该被选中,如果 count 与 childBoxs.length 相等,则 parentBox 被选中。

示例演示

接下来我们将通过两个示例来演示如何使用 HTML、CSS 和 JavaScript 实现复选框的全选与反选功能。

示例一:基本全选反选功能

<html>
  <head>
    <title>复选框全选反选</title>
    <style>
      label {margin-right: 15px;}
    </style>
  </head>

  <body>
    <label><input type="checkbox" id="parentBox" onchange="checkAll()">全选</label>
    <label><input type="checkbox" id="childBox1" class="childBox" onclick="checkSingle()">选项1</label>
    <label><input type="checkbox" id="childBox2" class="childBox" onclick="checkSingle()">选项2</label>
    <label><input type="checkbox" id="childBox3" class="childBox" onclick="checkSingle()">选项3</label>

    <script>
      function checkAll() {
        var parentBox = document.getElementById("parentBox");
        var childBoxs = document.getElementsByClassName("childBox");
        for(var i = 0; i < childBoxs.length; i++) {
          childBoxs[i].checked = parentBox.checked;
        }
      }

      function checkSingle () {
        var parentBox = document.getElementById("parentBox");
        var childBoxs = document.getElementsByClassName("childBox");
        var count = 0;
        for(var i = 0; i < childBoxs.length; i++) {
          if(childBoxs[i].checked === true) {
            count++;
          }
        }
        if(count === childBoxs.length) {
          parentBox.checked = true;
        } else {
          parentBox.checked = false;
        }
      }
    </script>
  </body>
</html>

以上代码实现了最基本的复选框全选和反选功能。当点击全选按钮后,子复选框全部被选中;当子复选框被点击后,全选按钮将根据当前子复选框的选中状态进行处理。

示例二:实现样式美化

接下来,我们将使用 CSS 样式实现更加美观的界面。

<html>
  <head>
    <title>复选框全选反选</title>
    <style>
      label {
        display: inline-block;
        margin-right: 15px;
        padding-left: 35px;
        position: relative;
      }
      label:before {
        content: "";
        display: inline-block;
        width: 26px;
        height: 26px;
        position: absolute;
        left: 0;
        bottom: 1px;
        background-color: #fff;
        border: 1px solid #c2c2c2;
        border-radius: 2px;
        box-shadow: 0 2px 3px -2px rgba(0,0,0,.5);
        transition: all .3s ease;
      }
      .childBox {
        position: absolute;
        opacity: 0;
        cursor: pointer;
        z-index: -1;
      }
      .childBox:checked + label:before {
        background-color: #4180db;
        border-color: #4180db;
      }
      .childBox:checked + label:before:before {
        content: '\2713';
        position: absolute;
        top: 3px;
        left: 6px;
        font-size: 25px;
        color: #fff;
        font-weight: bold;
      }
      #parentBox:checked + label:before:before {
        content: '\2713';
        position: absolute;
        top: 3px;
        left: 6px;
        font-size: 25px;
        color: #fff;
        font-weight: bold;
      }
    </style>
  </head>

  <body>
    <input type="checkbox" id="parentBox" class="childBox" onchange="checkAll()">
    <label for="parentBox">全选</label>

    <input type="checkbox" id="childBox1" class="childBox" onclick="checkSingle()">
    <label for="childBox1">选项1</label>

    <input type="checkbox" id="childBox2" class="childBox" onclick="checkSingle()">
    <label for="childBox2">选项2</label>

    <input type="checkbox" id="childBox3" class="childBox" onclick="checkSingle()">
    <label for="childBox3">选项3</label>

    <script>
      function checkAll() {
        var parentBox = document.getElementById("parentBox");
        var childBoxs = document.getElementsByClassName("childBox");
        for(var i = 0; i < childBoxs.length; i++) {
          childBoxs[i].checked = parentBox.checked;
        }
      }

      function checkSingle () {
        var parentBox = document.getElementById("parentBox");
        var childBoxs = document.getElementsByClassName("childBox");
        var count = 0;
        for(var i = 0; i < childBoxs.length; i++) {
          if(childBoxs[i].checked === true) {
            count++;
          }
        }
        if(count === childBoxs.length) {
          parentBox.checked = true;
        } else {
          parentBox.checked = false;
        }
      }
    </script>
  </body>
</html>

以上代码利用了 CSS 样式实现了更美观的界面样式效果,其中父复选框和子复选框的样式都进行了美化处理。同时,也可以带来更好的用户体验。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js html css实现复选框全选与反选 - Python技术站

(0)
上一篇 2023年6月9日
下一篇 2023年6月9日

相关文章

  • 一步步教大家编写酷炫的导航栏js+css实现

    在这里我将为大家详细讲解如何一步步实现酷炫的导航栏。 准备工作 在开始编写之前,我们需要准备一些文件。首先,我们需要HTML文件,将我们的导航栏放在其中,并链接我们的CSS和JS文件。然后我们需要一个CSS文件,用于样式的定义。最后,我们需要一个JS文件,用于编写我们的交互逻辑。 HTML结构 让我们先来看一下我们的导航栏需要的HTML结构。我们需要一个HT…

    css 2023年6月10日
    00
  • css实现文章分割线样式的多种方法总结

    CSS实现文章分割线样式的多种方法总结 在文章内容中,为了更好地梳理结构,通常会加入分割线。为了把分割线做得更加生动且独特,我们可以使用CSS来实现不同样式的分割线。本文将详细介绍实现CSS分割线样式的多种方法。 1. 使用border实现基础分割线 CSS的border属性可以实现一个基础的分割线,只需设置对应的边框样式、颜色和宽度即可。 .separat…

    css 2023年6月10日
    00
  • css样式层叠规则详解

    当多个 CSS 规则同时作用于同一个 HTML 元素时,就会涉及到 CSS 样式的层叠。而当出现了冲突时,就需要根据层叠规则来确定哪个样式会被最终应用到元素上。以下是 CSS 样式层叠规则的详解。 1. 权重 Specificity 当一个元素被多个 CSS 规则选择到时,就需要根据 Specificity 权重来决定哪一条样式会被优先应用。CSS 的 Sp…

    css 2023年6月10日
    00
  • 比ant更丰富Modal组件功能实现示例详解

    下面我将详细讲解“比ant更丰富Modal组件功能实现示例详解”的完整攻略。 背景 Modal是许多Web应用程序中不可或缺的组件,它可以在不离开当前页面的情况下展示内容。许多开源UI框架如Ant Design都提供了Modal组件,但它们的功能可能无法完全满足我们的需求。因此,我们需要自己开发高度自定义的Modal组件。 步骤 步骤1:定义Modal组件 …

    css 2023年6月9日
    00
  • CSS背景background、background-position使用详解

    CSS背景background、background-position使用详解 背景概述 在 CSS 中,每个元素都可以有一个背景。背景是一个用来设置元素背景表现的 CSS 属性合集,包括颜色、图片、位置、大小等。 CSS背景属性 background-color 用于设置元素背景的颜色。 div { background-color: #ffffff; }…

    css 2023年6月9日
    00
  • 值得收藏的CSS命名规范(规则)常用的CSS命名规则

    下面是关于“值得收藏的CSS命名规范(规则)常用的CSS命名规则”的详细讲解,包含以下内容: 什么是CSS命名规范? CSS命名规范是指在编写CSS代码时,根据一定的规则和标准对CSS样式名称进行命名的方式。通过遵循CSS命名规范,我们可以更好地组织和管理我们的代码,从而提高代码的可读性和可维护性。 常用的CSS命名规则 1. BEM命名法 BEM是一种广泛…

    css 2023年6月9日
    00
  • XML入门的常见问题(二)

    下面是针对“XML入门的常见问题(二)”的完整攻略: 1. 什么是XML Schema? XML Schema 是一种描述 XML 文件的结构和内容的语言,它主要用于检查和验证 XML 的有效性,并支持更加严格和灵活的数据校验。 XML Schema 不同于 DTD,它可以定义更多的数据类型和结构类型,更加灵活和强大,但语法复杂。 2. 如何使用XML Sc…

    css 2023年6月9日
    00
  • css firefox火狐浏览器下的兼容性问题

    CSS在Firefox中的兼容性问题主要包括以下几个方面: 盒模型的计算方法问题 Firefox与IE的盒模型计算方法有所不同。在标准模式下,Firefox采用的是W3C标准的盒模型,即元素的宽度是指content的宽度加上padding和border的宽度,而IE则采用的是IE盒模型,在IE盒模型中,元素的宽度是指content、padding和borde…

    css 2023年6月9日
    00
合作推广
合作推广
分享本页
返回顶部