这篇文章主要讲解了“JavaScript怎么定义简单的页面复选框实现全选操作”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript怎么定义简单的页面复选框实现全选操作”吧!
<el-dialog title="分配角色" :visible.sync="dialogRoleVisible"> <el-form label-width="80px"> <el-form-item label="用户名"> <el-input disabled :value="sysUser.username"></el-input> </el-form-item> <el-form-item label="角色列表"> <el-checkbox v-model="checkAll" @change="handleCheckAllChange">全选</el-checkbox> <div ></div> <el-checkbox-group v-model="originalRoleList" @change="handleCheckedChange"> <el-checkbox v-for="role in allRoles" :key="role.id" :label="role.id">{{role.roleName}}</el-checkbox> </el-checkbox-group> </el-form-item> </el-form> <div slot="footer"> <el-button type="primary" @click="assignRole" size="small">保存</el-button> <el-button @click="dialogRoleVisible = false" size="small">取消</el-button> </div> </el-dialog>
这里的每个复选框绑定每个角色的 id 值
originalRoleList
存放从后端获取到的当前员工对应的角色id数组
allRoles
存放获取到的所有角色列表,用于页面渲染
checkAll
bool值,true代表当前选中全选,false代表没有
allRolesId
根据所有角色获取到的所有角色 id
为了提升用户体验,allRoles
、allRolesId
两个变量都是在页面渲染之前获得,即通过 created 函数实现
created() { this.fetchData() //刷新数据 this.getAllRoles() },
通过调用后端提供的getRoles()
方法来获取到数据库中所有的角色集合,然后通过遍历该集合获取到所有角色的id数组
getAllRoles(){ api_r.getRoles().then(response => { this.allRoles = response.data; //获取所有的id集合 for(let i=0;i<this.allRoles.length;i++){ this.allRolesId[i] = this.allRoles[i].id } }) },
接下来就是本篇文章的重头戏,全选功能实现
由于originalRoleList
是通过 v-model 双向绑定,所以我们只需在点击全选按钮时更换当前originalRoleList
中的值就好了
handleCheckAllChange(){ //在每一次点击时通过三目运算符判断 this.checkAll === false ? true : false if(this.checkAll) this.originalRoleList = this.allRolesId else this.originalRoleList = [] },
解决完上述问题后,在调试中发现 在全选按钮选中的情况下,取消其他子选项并没有取消全选,所以此时我们应该在子按钮的 @change 事件中做相应的逻辑完善,即简单判断当前角色的idList是否于全选状态下的idList长度相等即可
handleCheckAllChange(){ //在每一次点击时通过三目运算符判断 this.checkAll === false ? true : false if(this.checkAll) this.originalRoleList = this.allRolesId else this.originalRoleList = [] },
感谢各位的阅读,以上就是“JavaScript怎么定义简单的页面复选框实现全选操作”的内容了,经过本文的学习后,相信大家对JavaScript怎么定义简单的页面复选框实现全选操作这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。