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

yizhihongxing

下面我将分以下几个方面来讲解如何使用 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日

相关文章

  • 移动端网页解决CSS的active伪类无效的方法

    移动端网页解决CSS的active伪类无效的方法主要是使用JS来实现。 方法一:使用touchstart和touchend事件 当移动端用户点击屏幕时,会先触发touchstart事件,当手指从屏幕上离开时会触发touchend事件。我们可以利用这两个事件来实现CSS的:active伪类的效果。 <button id="testBtn&quo…

    css 2023年6月10日
    00
  • 6款经典实用的jQuery小插件及源码(对话框/提示工具等等)

    6款经典实用的jQuery小插件及源码攻略 简介 本文将介绍6款经典实用的jQuery小插件及其源码,包括对话框、提示工具、选项卡、滚动条、下拉菜单、进度条等组件。这些小插件都能够在网站中提供便利的交互效果,增强用户体验。 1.对话框插件:Dialog Dialog是一个轻量级的对话框插件,可以用于页面中弹出模态对话框。它包含了丰富的配置选项,可以实现自定义…

    css 2023年6月9日
    00
  • 关于vue中媒体查询不起效的原因总结

    下面我将详细讲解关于Vue中媒体查询不起效的原因总结,包括问题的背景、原因分析、解决方法和示例说明。 问题背景 在使用Vue进行开发的过程中,我们时常会遇到媒体查询失效的问题。特别是在响应式设计中,媒体查询是非常重要的一个部分,如果查询不起效,会导致页面无法实现预期的效果。究其原因,其实是Vue对CSS样式的处理机制和我们在媒体查询时的习惯不太一样。 原因分…

    css 2023年6月10日
    00
  • 更靠谱的H5横竖屏检测方法(js代码)

    下面我将详细讲解如何实现更靠谱的H5横竖屏检测方法,并提供两个示例供参考。 1. 背景 在移动端开发中,常常需要根据设备的横竖屏状态来调整页面布局以适应不同的屏幕尺寸和方向。而实现横竖屏检测的方法也多种多样,比如通过screen.orientation.angle、window.orientation、resize事件等。但是这些方法都存在兼容性和准确性等问…

    css 2023年6月9日
    00
  • JavaScript框架Angular和React深度对比

    JavaScript框架Angular和React深度对比 概述 Angular和React是目前前端最流行的两个JavaScript框架,它们都具有很高的开发效率和良好的性能表现,但它们的设计理念和使用方式却存在很大的不同。本篇文章将对Angular和React从不同的方面进行详细的对比,从而帮助读者选择适合自己开发需求的框架。 设计理念 Angular是…

    css 2023年6月10日
    00
  • Dreamweaver中CSS怎么制作径向圆形渐变?

    以下是关于“Dreamweaver中CSS怎么制作径向圆形渐变”的完整攻略,包含两个示例说明。 步骤一:创建CSS样式 首先,需要创建一个CSS样式。可以按照以下步骤操作: 在Dreamweaver中,打开CSS样式面板。可以通过菜单栏的“窗口”>“CSS样式”来打开。 点击“新建样式表”按钮,创建一个新的CSS样式表。 在CSS样式表中,创建一个新的…

    css 2023年5月18日
    00
  • DIV背景半透明文字不半透明的样式

    当需要在网页上实现背景半透明、且文字不半透明的效果时,一种解决方案是使用CSS3的RGBA色彩模式,将背景色中的alpha值(透明度)调整为小于1的值。 我们可以采用以下步骤来实现这个效果: 1. 创建HTML元素 首先需要在HTML中创建一个元素,并为其添加唯一的class或id属性,用于在CSS中引用。例如,我们创建了一个div元素,其class属性为“…

    css 2023年6月11日
    00
  • Bootstrap作品展示站点实战项目2

    Bootstrap作品展示站点实战项目2旨在帮助使用Bootstrap框架的开发人员学习如何创建响应式的作品展示站点。以下是完整攻略的步骤: 1. 确定布局和内容 首先,需要确定网站的布局、颜色和内容。可以使用Adobe XD或Figma等工具,创建一个原型或模板。确定需要展示的内容和相应的布局,并确定在哪些页面上展示这些内容。然后根据需求确定Bootstr…

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