在页面中,经常需要控制一组 CheckBox 的选中状态,常用的操作有:

1.通过一个或者多个复选框来控制一组 CheckBox 的选中状态。

2.根据一组 CheckBox 的选中状态来决定某些控件的状态。如:

一组 CheckBox 中,至少有一项被选中,某个按钮才可以被点击,否则按钮处于灰色状态,不可点击。

一组 CheckBox 中,至少有一项被选中,某个文本框才可以输入内容,否则文本框处于失效状态,不可输入。

当页面有多处用到上述功能时,如何简单快速的实现这样的功能就成了关键。

先来看效果:

复选框联动

全选

11111

22222

33333

44444

55555

66666

两个复选框联动

全选

11111

22222

33333

44444

55555

66666

全选

其它对象联动

全选

11111

22222

33333

44444

55555

66666

全选

要使多个复选框成组,在写复选框的 HTML 代码时添加自定义属性 group ,如:

...

这样在页面显示时,group 名称相同的会成为一组。同样,在需要联动的对象的代码里添加自定义属性 forcheckboxgroup,名称为联动复选框组的 group 属性的值。当联动对象为复选框时,将控制全组的复选状态,当联动对象为其它元素时,复选框组将控制其 disabled 属性,规则是组内的复选框至少有一个选中时被联动的元素对象的 disabled 属性为 false,否则为 true。如:

...

要实现上述的功能,需要在页面中引入一个脚本。这个脚本是实现上述功能的核心。它定义了一个函数,会查找所有元素的 forcheckboxgroup 属性和所有复选框的 group 属性,并将它们关联起来,动态定义相应的事件,达到实现联动的功能。

由于 Firefox 和 Opera 的 getAttribute 只能读取由 setAttribute 写入的自定义属性,不能读取 HTML 代码中的自定义属性,所以此功能只能在 IE 中实现,所以代码也就不再判断浏览器类型了。如为防止出错可以自行加上这些代码。

JS 文件内容如下:

function

CheckboxGroup(){

var

arrelement

=

document.all;

var

i

=

0

;

while

(i

<

arrelement.length){

var

forgroupattrib

=

arrelement[i].getAttribute(

'

forcheckboxgroup

'

);

if

(forgroupattrib

!=

null

&&

forgroupattrib

!=

''

){

arrelement[i].setAttribute(

'

groupmember

'

,_getGroupMember(arrelement[i]));

if

(arrelement[i].tagName.toLowerCase()

==

'

input

'

&&

arrelement[i].type

==

'

checkbox

'

){

arrelement[i].onclick

=

function

(){

//

----------------------Checked All------------------

var

groupmember

=

this

.getAttribute(

'

groupmember

'

);

var

i

=

0

;

while

(i

<

groupmember.length){

groupmember[i].checked

=

this

.checked;

i

++

;

}

//

---------------------------------------------------

}

}

_setState(arrelement[i]);

}

i

++

;

}

}

function

_getGroupMember(o){

var

groupname

=

o.getAttribute(

'

forcheckboxgroup

'

);

var

items

=

new

Array;

var

inputs

=

document.getElementsByTagName(

'

input

'

);

var

i

=

0

;

while

(i

<

inputs.length){

if

(inputs[i].type

==

'

checkbox

'

){

var

groupattrib

=

inputs[i].getAttribute(

'

group

'

);

if

(groupattrib

==

groupname){

items[items.length]

=

inputs[i];

var

master

=

inputs[i].getAttribute(

'

groupmaster

'

);

if

(master

==

null

) {

master

=

new

Array;

master[

0

]

=

o.uniqueID;

inputs[i].setAttribute(

'

groupmaster

'

, master);

}

else

{

master[master.length]

=

o.uniqueID;

}

inputs[i].onpropertychange

=

function

(){

if

(event.propertyName

==

'

checked

'

) {

var

arro

=

this

.getAttribute(

'

groupmaster

'

);

var

i

=

0

;

while

(i

<

arro.length) {

_setState(document.getElementById(arro[i]));

i

++

;

}

}

}

}

}

i

++

;

}

return

items;

}

function

_setState(o){

var

master

=

o;

if

(master

!=

null

){

var

chkselall

=

true

;

var

chknosel

=

true

;

var

groupmember

=

master.getAttribute(

'

groupmember

'

);

var

i

=

0

;

while

(i

<

groupmember.length){

if

(chkselall)chkselall

=

groupmember[i].checked;

if

(chknosel)chknosel

=

!

groupmember[i].checked;

i

++

;

}

if

(master.tagName.toLowerCase()

==

'

input

'

&&

master.type

==

'

checkbox

'

){

if

(chkselall) {

master.indeterminate

=

false

;

master.checked

=

true

;

}

if

(chknosel) {

master.indeterminate

=

false

;

master.checked

=

false

;

}

if

(

!

chkselall

&&!

chknosel)master.indeterminate

=

true

;

}

else

{

master.disabled

=

chknosel;

}

}

}

window.attachEvent(

'

onload

'

,CheckboxGroup);

html下拉复选框联动,HTML : CheckBox 复选框成组联动(JavaScript)相关推荐

  1. 下拉框、下拉控件之Select2(含多选)

    这个select2组件的功能确实很强大,可以将图片放入到select里面随着文字一起显示. 组件的下载地址以及API说明地址: 1.Select2使用示例地址:https://select2.gith ...

  2. vue element ui下拉菜单和不是table列表全选功能问题解决方案

    这半个月都在折腾vue的项目,虽然不是很复杂,但对于刚入门的小白来说,踩到的坑不少,常常因为一个小问题就得浪费好久问题,不过娃不在身边,晚上和周末可以继续研究,趁睡觉前,把今天遇到的问题给总结一下,做 ...

  3. 下拉样式_Axure 组件重写之神奇的文本框和下拉框

    现有的系统组件不够好用,加之我们能利用axure基本功能来实现更好用的组件,因此,就有了重写系列教程. 1. 什么是重写? 为了更好发挥产品原型在系统设计阶段指引.展示等需求,通过种种方式对原生组件进 ...

  4. ios Rn0.44 Xcode9 ScrollView下拉距离过短或下拉刷新后 不能自动回弹、复位置顶

    早期做RN的时候是基于0.44版本的,后面做需求迭代版本时候因人手不够也没去主动升级,一直拖到近期才升级到0.55+,且还未完成兼容测试.但目前因为有个小需求需要捉急上线,于是就还在老分支上开发,然后 ...

  5. Excel单元格如何增加下拉选项(类似于web中的select选项框)

    ☀效果图 1.选择待加[下拉选项]的单元格,依次点击数据 - 数据有效性(小三角▼)- 数据有效性 2.在弹出框中[设置]栏[允许]下拉框中选择"序列" 3.在[来源]输入框中输入 ...

  6. react 全选反选_react解决checkbox全选checked的问题

    react解决checkbox全选checked的问题 日期:2018-08-23 来源:程序思维浏览:2117次 今天在做react后台管理系统需要批量删除功能,没想到checkbox在react里 ...

  7. php+js实现二级联动下拉菜单(结合mysql数据库)_jQuery结合PHP+MySQL实现二级联动下拉列表[实例]...

    实现原理:根据省份值的变动,通过jQuery把sf_id传给后台php文件处理,php通过查询MySQl数据库,得到对应的地市名,并返回JSON数据给前端处理,即实现联动效果! 为便于讲解,这里直接给 ...

  8. js 实现多选框(复选框) 和单选框,下拉框功能完整示例代码附效果图

    <!DOCTYPE html> <html><head><meta charset="utf-8" /><script src ...

  9. ElementUI中el-select下拉框选择不同的项控制其他控件(单选控件)的显示和隐藏

    场景 在el-select的下拉框中,下拉选择指定的下拉项时才会显示后面的单选框,否则不显示. 效果如下 注: 博客: https://blog.csdn.net/badao_liumang_qizh ...

最新文章

  1. IBM Watson大裁70% 员工,撕掉了国内大批伪AI企业最后一块遮羞布!
  2. 初识FPGA(二)(FPGA与ASIC及CPLD的对比)
  3. 微服务乱码_netcore 之动态代理(微服务专题)
  4. 计算机频率、内存相关杂谈
  5. 记录第一次使用Texlive+TexStudio写论文时遇到的问题(随时更新)
  6. mysql session 数_查询数据库当前连接数(session),进程数等操作
  7. fluorinefx C# 版的开源rtmp服务器
  8. css中clear的作用是什么?
  9. 如何优化WebAPP性能:从四个层面上彻底优化前端项目性能
  10. j2ee高并发时使用全局变量需要注意的问题
  11. 实例化讲解 RunLoop
  12. ps aux 输出格式
  13. vi vim 字符串替换
  14. java 微服务架构图_图解微服务架构演进
  15. cnpm install Error: EACCES: permission denied
  16. CSS样式实现雷达扫描动效
  17. C++软件调试与异常排查从入门到精通系列汇总
  18. 架设网站前都需要准备些什么
  19. 计算机原理电梯控制系统设计,《智能电梯控制系统的实现》-毕业论文(设计).doc...
  20. 如何实现文件断点续传功能

热门文章

  1. 1000瓶药中找出一瓶毒药,10只老鼠做试验
  2. JetBrains.ReSharper 字典
  3. js splice,slice,split区别
  4. 七彩虹战斧C.AB350M-HD魔音版V14A刷Bios教程
  5. python场景文字识别_针对复杂场景的 OCR 文本识别,推荐一个Python 库!
  6. 最窄770px最宽1024px经典布局
  7. 继电器控制模块的一些知识
  8. 数据库课程设计-图书馆管理系统(2.数据库实现-基于mysql)
  9. 使用Anaconda写Python程序,强烈推荐Spyder
  10. 整理:卷积的直观理解、物理意义与本质(四)