JavaScript实现全选、反选功能(Vue全选、反选,js原生全选、反选)

简介:

  • 在JavaScript中,实现全选和反选通常是通过操作DOM元素和事件监听来实现;

  • 全选功能:当用户点击一个“全选”复选框时,页面中所有具有相同类名的复选框都将被选中;

  • 反选功能:用户点击一个“反选”复选框时,已选中的将变为未选中,未选中的将变为选中。

这里分别用原生JS和Vuejs实现一下

一、JavaScript实现

1、先看效果

2、html部分

<div class="test_checks"><h2>JavaScript原生全选、反选功能</h2><input type="checkbox" id="selectAll" /> Select All<br /><br /><input type="checkbox" class="checkbox" /> Item 1<br /><input type="checkbox" class="checkbox" /> Item 2<br /><input type="checkbox" class="checkbox" /> Item 3<br />
</div>

3、这里首先为selectAll复选框添加了一个change事件监听器,当用户点击该复选框时,将触发该事件;然后在事件处理函数中,通过遍历所有复选框,将它们的选中状态设置为与selectAll复选框相同的状态

document.getElementById("selectAll").addEventListener("change", function () {var checkboxes = document.getElementsByClassName("checkbox");for (var i = 0; i < checkboxes.length; i++) {checkboxes[i].checked = this.checked;}
});

4、这里在事件处理函数中,为每个复选框添加了一个change事件监听器。当用户点击某个复选框时,触发该事件。在事件处理函数中,首先设置allChecked变量为true,然后遍历所有复选框,如果发现有复选框没有被选中,将allChecked变量设置为false并跳出循环。最后,将selectAll复选框的选中状态设置为allChecked

    var checkboxes = document.getElementsByClassName("checkbox");for (var i = 0; i < checkboxes.length; i++) {checkboxes[i].addEventListener("change", function () {var allChecked = true;for (var j = 0; j < checkboxes.length; j++) {if (!checkboxes[j].checked) {allChecked = false;break;}}document.getElementById("selectAll").checked = allChecked;});}

5、完整代码

  <div class="test_checks"><h2>JavaScript原生全选、反选功能</h2><input type="checkbox" id="selectAll" /> Select All<br /><br /><input type="checkbox" class="checkbox" /> Item 1<br /><input type="checkbox" class="checkbox" /> Item 2<br /><input type="checkbox" class="checkbox" /> Item 3<br /></div><script>document.getElementById("selectAll").addEventListener("change", function () {var checkboxes = document.getElementsByClassName("checkbox");for (var i = 0; i < checkboxes.length; i++) {checkboxes[i].checked = this.checked;}});var checkboxes = document.getElementsByClassName("checkbox");for (var i = 0; i < checkboxes.length; i++) {checkboxes[i].addEventListener("change", function () {var allChecked = true;for (var j = 0; j < checkboxes.length; j++) {if (!checkboxes[j].checked) {allChecked = false;break;}}document.getElementById("selectAll").checked = allChecked;});}</script>

二、Vue.Js实现

1、先看效果

2、html部分

<div><!-- 全选按钮 --><inputtype="checkbox"v-model="checkAllFlag"@change="choseCheckAll"/><!-- 可选项目列表 --><ul><li v-for="(item, index) in items" :key="index"><inputtype="checkbox"v-model="checkedS":value="item.id"@change="ChoseChecks"/>{{ item.name }}</li></ul>
</div>

这里为全选按钮绑定一个v-model的checkAllFlag状态,用于存储全选状态;然后为每个可选项目绑定一个v-model的 checkedS属性,它是一个数组,用于存储被选中的项目的ID。

3、然后定义相关的数据类型

data() {return {checkAllFlag: false,checkedS: [],items: [{ id: 1, name: "Item 1" },{ id: 2, name: "Item 2" },{ id: 3, name: "Item 3" },{ id: 4, name: "Item 4" },],};
},

4、函数部分

  methods: {choseCheckAll() {this.checkedS = this.checkAllFlag? this.items.map((item) => item.id): [];},ChoseChecks(value) {if (this.checkAllFlag && value) {this.checkAllFlag = false;} else if (!this.checkAllFlag &&this.checkedS.length === this.items.length &&value) {this.checkAllFlag = true;}},},

这里为全选按钮的@change事件choseCheckAll,该方法根据全选状态更新所有项目的选中状态。
每个可选项目的@change事件触发一个方法(如 ChoseChecks),用于更新全选状态,当所有项目都被选中或取消选中时,全选按钮的状态应相应改变。


5、注意事项

choseCheckAll 方法:

  1. 当全选按钮被选中时,将所有项目的ID(this.items.map(item => item.id))赋值给 checkedS,实现全选。
  2. 当全选按钮被取消选中时,将 checkedS 设置为空数组,取消所有项目的选中状态。

ChoseChecks 方法:

  1. 当全选按钮已选中且某个项目被取消选中时,将 checkAllFlag 设置为 false,表示不再全选。
  2. 当全选按钮未选中,且当前选中的项目数量等于总项目数,将 checkAllFlag 设置为 true,表示所有项目已被选中。

6、完整代码

  <div class="test_checks"><inputtype="checkbox"v-model="checkAllFlag"@change="choseCheckAll"/><span class="checkll_dom">全选</span><ul><li v-for="(item, index) in items" :key="index"><inputtype="checkbox"v-model="checkedS":value="item.id"@change="ChoseChecks"/>{{ item.name }}</li></ul></div>data() {return {checkAllFlag: false,checkedS: [],items: [{ id: 1, name: "Item 1" },{ id: 2, name: "Item 2" },{ id: 3, name: "Item 3" },{ id: 4, name: "Item 4" },],};},methods: {choseCheckAll() {this.checkedS = this.checkAllFlag? this.items.map((item) => item.id): [];},ChoseChecks(value) {if (this.checkAllFlag && value) {this.checkAllFlag = false;} else if (!this.checkAllFlag &&this.checkedS.length === this.items.length &&value) {this.checkAllFlag = true;}},},

创作不易,感觉有用,就一键三连,感谢(●'◡'●)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/301202.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ARP寻址过程

当知道目标的IP但是不知道目标的Mac地址的时候就需要借助ARP寻址获取目标的Mac地址&#xff0c;传输层借助四元组&#xff08;源IP源端口&#xff1a;目标IP目标端口&#xff09;匹配&#xff0c;网络层借助IP匹配&#xff0c;数据链路层则根据Mac地址匹配&#xff0c;数据传输…

局域网共享文件夹怎么加密?局域网共享文件夹加密方法介绍

在企业局域网中&#xff0c;共享文件夹扮演着重要的角色。为了保护数据安全&#xff0c;我们需要加密保护局域网共享文件夹。那么&#xff0c;局域网共享文件夹怎么加密&#xff1f;下面我们来了解一下吧。 局域网共享文件夹加密方法 局域网共享文件夹加密推荐使用共享文件夹加…

在git上先新建仓库-把本地文件提交远程

一.在git新建远程项目库 1.选择新建仓库 以下以gitee为例 2.输入仓库名称&#xff0c;点击创建 这个可以选择仓库私有化还公开权限 3.获取仓库clone链接 这里选择https模式就行&#xff0c;就不需要配置对电脑进行sshkey配置了。只是需要每次提交输入账号密码 二、远…

万字源码解析!彻底搞懂 HashMap【一】:概念辨析与构造方法源码解析

HashMap 的底层原理和扩容机制一直都是面试的时候经常被问到的问题&#xff0c;同时也是集合源码中最难阅读的一部分&#x1f622;&#xff0c;之前更新的 ArrayList 源码阅读收获了很多朋友的喜欢&#xff0c;也给了我很多自信&#xff1b;本次我准备完成一个关于 HashMap 源码…

python练习三

模式A num int(input("请输入模式A的层数&#xff1a;")) for i in range(1, num 1):# 画数字for j in range(1, i 1):print(str(j) "\t", end"")print() 模式B num int(input("请输入模式B的层数&#xff1a;")) for i in ran…

九州金榜|孩子叛逆的原因是什么?

孩子随着年龄增长都会出现叛逆心理&#xff0c;很多家长不知道孩子为什么会出现叛逆心理&#xff0c;也不知道如何去引导孩子&#xff0c;下面九州金榜家庭教育就带大家了解一下孩子出现叛逆的原因。 一、心理需求增加 孩子对新事物的探索以及追求会随着人际交往扩大而增加&am…

2024年MathorCup妈妈杯数学建模思路D题思路解析+参考成品

1 赛题思路 (赛题出来以后第一时间在群内分享&#xff0c;点击下方群名片即可加群) 2 比赛日期和时间 报名截止时间&#xff1a;2024年4月11日&#xff08;周四&#xff09;12:00 比赛开始时间&#xff1a;2024年4月12日&#xff08;周五&#xff09;8:00 比赛结束时间&…

买卖股票的最佳时机IV

题目链接 买卖股票的最佳时机 IV 题目描述 注意点 1 < k < 1001 < prices.length < 10000 < prices[i] < 1000不能同时参与多笔交易&#xff08;必须在再次购买前出售掉之前的股票&#xff09;最多可以完成 k 笔交易 解答思路 本题与买卖股票的最佳时机…

单例模式--理解

单例模式 单例模式是指在内存中只会创建且仅创建一次对象的设计模式。在程序中多次使用同一个对象且作用相同时&#xff0c;为了防止频繁地创建对象使得内存飙升&#xff0c;单例模式可以让程序仅在内存中创建一个对象&#xff0c;让所有需要调用的地方都共享这一单例对象。 单…

Vue - 你知道Vue组件之间是如何进行数据传递的吗

难度级别:中级及以上 提问概率:85% 这道题还可以理解为Vue组件之间的数据是如何进行共享的,也可以理解为组件之间是如何通信的,很多人叫法不同,但都是说的同一个意思。我们知道,在Vue单页面应用项目中,所有的组件都是被嵌套在App.vue内…

『VUE』14. Style绑定(详细图文注释)

目录 行内css动态样式对象引入数组引入代码演示总结 欢迎关注 『VUE』 专栏&#xff0c;持续更新中 欢迎关注 『VUE』 专栏&#xff0c;持续更新中 大体上和前面的class绑定是一致的,只是class换成了style. 请注意,实际开发中,我们一般建议用class,因为style的权重太高了,用sty…

能不能换DB吗?--抽象工厂模式

1.1 就不能不换DB吗&#xff1f; 都是换数据库惹的祸。 "我们团队前段时间用.net的C#来开发好一个项目&#xff0c;是给一家企业做的电子商务网站&#xff0c;是用SQL Server作为数据库的&#xff0c;应该说上线后除了开始有些小问题&#xff0c;基本都还可以。而后&#…

【2024】Rancher的安装与介绍

———————————————————————————— 记录一下rancher的学习与使用过程 本部分内容包括rancher的介绍、特点、与k8s关系和部署等内容 ———————————————————————————— Rancher是什么&#xff1f; 简单来说&#xff0c;Ranc…

ChatGPT 在做什么,为什么有效?

原文&#xff1a;What Is ChatGPT Doing … and Why Does It Work? 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 序言 这本简短的书试图从第一原理解释 ChatGPT 是如何工作的。在某种程度上&#xff0c;这是关于技术的故事。但它也是关于科学的故事。以及关于哲学…

MySQL的内连接和外连接

内连接 在之前的MySQL的复合查询时&#xff0c;我们能够通过给两个表做笛卡尔积查询和where子句限定条件来查询想查询的数据&#xff0c;不过MySQL还提供了内连接用来给两个表做笛卡尔积&#xff0c;对比之前的复合查询笛卡尔积来说语法更加简洁。 语法&#xff1a;select 字段…

基于51单片机的温度、烟雾、火焰检测设计

基于51单片机的火灾检测设计 &#xff08;仿真&#xff0b;程序&#xff0b;原理图设计报告&#xff09; 功能介绍 具体功能&#xff1a; 1.使用MQ-2烟雾采集&#xff0c;使用ADC0832将传感器输出的模拟信号转化为数字信号&#xff0c;再传给单片机。 2.使用DS18B20采集温度。…

Linux中shell脚本的学习第一天,编写脚本的规范,脚本注释、变量,特殊变量的使用等,包含面试题

4月7日没参加体侧的我自学shell的第一天 Shebang 计算机程序中&#xff0c;shebang指的是出现在文本文件的第一行前两个字符 #&#xff01; 1)以#!/bin/sh 开头的文件&#xff0c;程序在执行的时候会调用/bin/sh, 也就是bash解释器 2)以#!/usr/bin/python 开头的文件&#…

动态代理

动态代理 动态代理和静态代理角色一致。 代理类是动态生成的,不是我们直接写好的。 动态代理分为俩大类:基于接口的动态代理、基于类的动态代理 基于接口:JDK动态代理(以下示例就是这个) 基于类:cglib java字节码实现:javasist JDK动态代理 InvocationHandler Proxy …

记一次Cannot deploy POJO class [xxx$$EnhancerBySpringCGLIB$$xxx]的错误

最近项目上需要使用websocket做服务端&#xff0c;那好说啊&#xff0c;直接springboot集成的websocket 引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId><versi…

Qt 实现简易的视频播放器,功能选择视频,播放,暂停,前进,后退,进度条拖拉,视频时长显示

1.效果图 2.代码实现 2.1 .pro文件 QT core gui multimedia multimediawidgets 2.2 .h文件 #ifndef VIDEOPLAYING_H #define VIDEOPLAYING_H#include <QWidget> #include<QFileDialog>#include<QMediaPlayer> #include<QMediaRecorder> #in…