Select2实现全选功能


好久没有写博客,有问题解决了一直用笔记记录,最近还是决定用起来,开始吧

需求描述:如图所示,需要将ABCDE(因为涉及到公司内部的一些东西,就不展示具体的内容了),能够一键全选到选择框中

实现思路:1、在下拉框的选项中添加全选这个选项
2、给select添加onchange事件
3、触发onchange则判断选项的内容是不是全选,如果是调用check_all(select_id),将其他的选项都添加到选择框中
4、添加入选项框时需要去掉”全选“这个选项,否则会触发死循环(后文会讲)
5、抽象出check_all(select_id)为单独的函数,可以被多处复用

上代码:
1、在下拉框的选项中添加全选这个选项
var newItem = document.createElement("option"); var newItemText = document.createTextNode("全选"); newItem.appendChild(newItemText); select.appendChild(newItem);
2、为选择框绑定onchange事件,触发onchange则判断选项的内容是不是全选,如果是调用check_all(select_id),将其他的选项都添加到选择框中

3、实现全选的函数:

此处说明可能触发死循环的原因:因为我们的select框绑定了onchange事件,而我们将所有选项加入框中的操作,也是通过代码去触发onchange事件,所以在将全部选项添加入select框中时,又会再次触发onchage事件,会判断select框中是否包含"全选",如果此时我们将全选加入select框中,就又会调用check_all,造成死循环

4、抽象出check_all(select_id)为单独的函数,可以被多处复用,见3中的check_all函数已经是抽象出来的function

最后总结一下这次花费我几个小时的原因和一点坑:
1、一开始想做一个单独的全选按钮,并且也这样做了,但是最后感觉太丑了而放弃,就想着还是把全选也作为一个option吧。
2、但是option不想button一样可以单独绑定事件,要绑定事件,只能在其最近的父节点,即select框上进行绑定,那自然不能绑定click事件了(一开始就是想给option绑定click事件,结果发现一直绑定不上,查了好久)。
3、死循环,第三次提了,一定要注意死循环,当然也有很多其他的思路避免和设计方法这个死循环

题外话:最近慢慢开始走入python的坑,希望能变得更强(给自己打点气,读者可以自行忽略)


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM