如何通过js实现勾选复选框

JavaScript013

如何通过js实现勾选复选框,第1张

js勾选复选框示例i:

//获取页面所有checkbox(checkbox的name设置一致)

var items=document.getElementByName("checkbox的name")

//遍历checkbox

for(var i=0i<items.lengthi++){

    //当前checkbox实现勾选

    items[i].checked=true

}

分析该过程,可拆分成两个步骤:

该布局基于 element-ui,一个父容器 box,里面一个 mask div,一个 el-checkbox-group 块。其中父容器设置 position: relative子 mask 容器设置 position: absolute并且其宽、高、偏移值根据鼠标当前位置动态计算

该部分逻辑实际上可拆分为 4 个步骤:

1. 给 box 绑定 mousedown 事件

2. mousemove 事件,比较简单,只是更新 end_x,end_y 坐标

3. mouseup 事件,移除 mousemove、mouseup 事件,并调用判断方法

4. 处理框选逻辑

难点是如何判断元素是否被框选住

问题可转化为 框选矩形是否与 checkbox 矩形 相交或者包含在内,即 两矩形是否相交或者存在包含关系

假定矩形 A1 左上角坐标为 (x1,y1)矩形宽度为 width1,高度为 height1

假定矩形 A2 左上角坐标为 (x2,y2)矩形宽度为 width2,高度为 height2

画图分析,只看水平方向:

由图可以得出,x 方向上:

令 maxX = Math.max(x1 + width1, x2 + width2)

令 minX = Math.max(x1, x2)

若相交或包含则必满足: maxX - minX <= width1 + width2

同理可以容易得到 y 轴相交的判断

使用 Element.getBoundingClientRect()获取 dom 元素位置信息

该部分逻辑如下,比较简单

难点已经攻破,遍历 checkbox 集合,每个 checkbox 都执行上面的矩形相交判断,并进行相应的勾选处理,此处不再多累述

源码

END

给那些复选框绑定选择事件onchange,用jQuery去做,如:

$('input [name=check]').change(function(){//假设复选框的html:<input name="check" type="checkbox"/>

   var ele=this//当前选择的复选框,把复选框的value值显示在一个div中(<div id="show"></div>)

   var val=$(ele).val()

   var str=$('#show').html()//先获取用显示div的内容,然后把当前复选框内容拼接,再把拼接内容在show中

   str+=val//拼接当前值val

   $('#show').html(str)//显示 

})