select原生标签实现多选

716 阅读2分钟

场景阐述

表单中的下拉列表多选,提交时,保存多选的顺序; 回显时,以保存的顺序依次回显;

场景截图

截图参考地址

image.png

思考

  • 遐想了一下如何实现
  • 提交到接口的数据[1,20,4,5,2],接口返回的数据[1,20,4,5,2]【这不废话么】;
  • 上一步细想,反显数据对应的枚举顺序也是[1,20,4,5,2]
  • 没有进入思考场景?
  • 再来梳理一下

select下拉枚举

[
    {name:'张三', value: 3},
    {name:'李四', value: 4},
    {name:'王五', value: 5},
    {name:'猪八戒', value: 86},
]
  • 提交数据:[86,4]
  • 通过提交的下标集合[86,4]和下拉枚举,实现多选回显:'猪八戒','李四'
  • 咋实现呢?先简单捋一捋

步骤:

  • 构建list枚举数据
  • 点击多选,保存多选下标值
  • 根据多选下标值,匹配枚举,回显出正确的多选枚举描述
  • 注意先后顺序

正文部分

完善上述步骤:

  • 构建枚举数据list,定义数据属性名称【name,value】,值类型【string,number】
  • select标签属性验证,面向MDN查询属性适配

select的首个option标签是会回显到选中数据中的,所以首个option可以隐藏不展示,或者直接命名为'全部'或者'请选择',效果如图:

image.png

image.png

  • 点击多选,保存多选下标值

使用DOM原生事件addEventListener,元素属性selectedIndex结合来实现

  • 根据多选下标值,匹配枚举,回显出正确的多选枚举描述

最简单的for循环即可实现,循环对象为选中下标值集合

成品demo

code.juejin.cn/pen/7246632…

遐想与碎碎念

无论技术多厉害的大佬,终究是要退休的

写文章这件事在当前阶段能够让自己心情平复,并不断向前就足矣,无需取悦谁,嘲讽谁~

尝试去接触不同的人,连接触都没有,又如何判断他人的好与坏呢~

最后

不足之处请指出,缺陷我改,其他我看着改~😏