checkbox的indeterminate属性使用介绍

checkbox的indeterminate属性使用介绍

概述

checkbox是前端常用的控件之一,可以用来表示两种状态:选中或未选中。但实际开发中,有时候需要对多个checkbox进行操作,这时候判断这些checkbox的选中状态就有些繁琐了。所以,checkbox提供了一个特殊的状态:indeterminate(半选中状态),可以在未完全选中或未完全取消选中的情况下,表示一个节点或者子节点下部分数据选中的情况。

使用方法

  1. 在HTML中设置checkbox的indeterminate属性

在HTML中设置checkbox的indeterminate属性可以通过DOM的方法,也可以直接在HTML标签中设置。其中,DOM方法包括setAttribute和removeAttribute方法,而在HTML标签中设置可以通过如下方式实现:

<input type="checkbox" id="check" indeterminate>
  1. JavaScript中通过属性设置indeterminate状态

通过JavaScript属性设置checkbox的indeterminate状态是比较常用的方法,可以分为两个步骤:

(1)先选中checkbox控件

var checkbox = document.getElementById('check');

(2)设置checkbox的indeterminate属性为true或false

checkbox.indeterminate = true;

示例说明

示例1:对checkbox全选进行操作

需求:在一个复杂表单里,有多个商品数据需要展示,并且每个商品都有对应的checkbox,为表单做全选、反选等操作。

实现方法:获取所有checkbox的DOM节点,对checkbox的checked和indeterminate属性进行操作。

<input type="checkbox" id="checkAll"> 全选
<input type="checkbox" class="checkSub"> 商品1
<input type="checkbox" class="checkSub"> 商品2
<input type="checkbox" class="checkSub"> 商品3
<input type="checkbox" class="checkSub"> 商品4
var checkAll = document.querySelector('#checkAll');
var checkSub = document.querySelectorAll('.checkSub');
checkAll.addEventListener('change', function () {
  for (var i = 0; i < checkSub.length; i++) {
    checkSub[i].checked = this.checked;
    checkSub[i].indeterminate = false;
  }
});
for (var i = 0; i < checkSub.length; i++) {
  checkSub[i].addEventListener('change', function () {
    var checkedCount = 0;
    for (var j = 0; j < checkSub.length; j++) {
      if (checkSub[j].checked) {
        checkedCount++;
      }
    }
    checkAll.checked = checkedCount === checkSub.length;
    checkAll.indeterminate = checkedCount !== 0 && checkedCount !== checkSub.length;
  });
}

示例2:checkbox的多级联动操作

需求:页面中有一个“全选”按钮,当其中的一项(父级)被选中时,下一级的所有checkbox也应该被选中,但如果下一级的某一项被手动取消选择,则父级的状态也应变为“半选择状态”。

实现方法:对父子级别checkbox的checked和indeterminate属性进行操作。

<input type="checkbox" id="parent"> 父级
  <ul>
    <li><input type="checkbox" class="child"> 子级1</li>
    <li><input type="checkbox" class="child"> 子级2</li>
  </ul>
var parent = document.getElementById('parent');
var child = document.querySelectorAll('.child');
parent.addEventListener('change', function () {
  for (var i = 0; i < child.length; i++) {
    child[i].checked = this.checked;
    child[i].indeterminate = false;
  }
});
for (var i = 0; i < child.length; i++) {
  child[i].addEventListener('change', function () {
    var checkedCount = 0;
    for (var j = 0; j < child.length; j++) {
      if (child[j].checked) {
        checkedCount++;
      }
    }
    parent.checked = checkedCount === child.length;
    parent.indeterminate = checkedCount !== 0 && checkedCount !== child.length;
  });
}

以上,就是对于checkbox的indeterminate属性使用介绍的详细攻略了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:checkbox的indeterminate属性使用介绍 - Python技术站

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

相关文章

  • Javascript基于AJAX回调函数传递参数实例分析

    针对“Javascript基于AJAX回调函数传递参数实例分析”的完整攻略,以下是详细讲解: 什么是AJAX回调函数 AJAX(Asynchronous JavaScript and XML)是一种 Web 开发技术,它通过异步的方式向服务器发送请求,而不会影响页面的加载和用户的交互。回调函数则是一个在异步操作完成后执行的函数。 在 JavaScript 中…

    JavaScript 2023年6月11日
    00
  • 小议javascript 设计模式 推荐

    小议JavaScript设计模式 前言 JavaScript是一种弱类型、动态类型的解释性脚本语言,开发人员可以在编写代码的同时运行程序,这使得JavaScript成为了Web开发过程的重要组成部分。借助JavaScript设计模式,开发人员能够更加规范、优化自己的代码,提高代码的可维护性和可拓展性,使得自己称为一个优秀的程序员。 常见设计模式 Javasc…

    JavaScript 2023年6月10日
    00
  • 基于ajax和jsonp的原生封装(实例)

    我来详细讲解“基于ajax和jsonp的原生封装(实例)”的完整攻略。 什么是AJAX和JSONP? AJAX是Asynchronous JavaScript and XML(异步的JavaScript和XML)的缩写,指的是一种在不重新加载整个页面的情况下,通过JavaScript进行局部刷新的技术。AJAX可以实现异步请求后端数据,在不影响页面正常操作的…

    JavaScript 2023年5月27日
    00
  • JavaScript 自定义对象方法汇总

    JavaScript 自定义对象方法汇总 在 JavaScript 中,我们可以通过自定义对象方法来为对象添加各种功能和行为。本文将详细讲解如何自定义对象方法。 一、创建对象 在 JavaScript 中创建对象可以使用构造函数和字面量两种方式。 构造函数方式创建对象 使用构造函数可以创建一个类,再通过实例化对象来使用这个类中的自定义方法。示例代码如下: /…

    JavaScript 2023年5月27日
    00
  • 利用JS对iframe父子(内外)页面进行操作的方法教程

    当我们需要在网站中嵌入其他网站的内容时,常常会使用iframe标签。使用iframe可以在主页面中展示其他网页的内容,但同时也给页面间的交互带来了一些挑战。在这种情况下,我们可以使用JavaScript来实现对iframe父子页面的分别操作,包括:在子页面中触发父页面的操作,或在父页面中修改子页面中的内容。 下面是一个完整的攻略,包括两个示例说明: 操作子页…

    JavaScript 2023年6月11日
    00
  • 手机端 HTML5使用photoswipe.js仿微信朋友圈图片放大效果

    下面是关于“手机端HTML5使用photoswipe.js仿微信朋友圈图片放大效果”的攻略。 介绍 Photoswipe.js是一款优秀的为移动端而设计的图片浏览器,可以让你在手机端实现类似微信朋友圈图片查看的效果。在移动设备上,用户可以轻松地浏览图片、缩放、旋转和分享。 步骤 步骤一: 下载Photoswipe.js文件 首先,我们需要从官网下载Photo…

    JavaScript 2023年6月11日
    00
  • PHP rawurlencode与urlencode函数的深入分析

    PHP rawurlencode与urlencode函数的深入分析 概述 在网络传输过程中,由于URL不能包含特殊字符,因此需要将URL中的特殊字符进行编码转义。PHP提供了两个函数用于URL编码转义:urlencode()和rawurlencode()。本文将深入分析这两个函数的运行机制及不同之处,以及在什么情况下使用它们。 urlencode() url…

    JavaScript 2023年5月19日
    00
  • JS实现的4种数字千位符格式化方法分享

    下面是JS实现的4种数字千位符格式化方法分享的详细攻略。 1. 使用toLocaleString() 可以使用toLocaleString()方法来实现数字千位符格式化。这个方法是JavaScript内置的方法,可以将数字转化为本地字符串格式。 let num = 1234567.89; console.log(num.toLocaleString()); …

    JavaScript 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部