layui 使用xmSelect组件多选下拉

13 篇文章 0 订阅

layui 使用xmSelect组件多选下拉

在开发过程中,有使用layui框架和xmSelect组件做一个多选的下拉框功能,但是在表单中可能会有多个的多选下拉框组件,所以我们希望把它封装成一个方法,通过传递不同的参数,实现多个下拉框组件,
这里后台要求提交表单的数据格式是formData,所以在这里面又会有几个问题了。
1.表单提交的数据中,xmSelect下拉框组件在提交表单的数据中他的字段名是select,使用多个下拉框那么在表单中就会有多个select,传递给后台的字段名对不上。
2.在传递多选下拉框值的时候,后台可能会对与这个字段值会要求是数组,然而formData中传递数组,会把参数解析成字符串给后台,所以这个不符合条件
3.传递给后台的下拉框的字段值是数组时,回显的时候前端把它转为数组回显时,再去修改下拉框时,会遇到去除选中项,要点击两次的情况(不知道其他人有没有遇到过),猜测是因为回显数据是返回的是一个字符串,前端再把字符串转为数组,渲染到页面的时候,可能是数据渲染出了问题。如果传递的是一个数组就不会有这个问题。

对于多个下拉框进行取值

这样根据ID取出的数据是一个字符串

var vallist = xmSelect.get('#demo1', true).getValue('valueStr');  //  获取选中的Id并用 "," 拼接。
var namelist = xmSelect.get('#demo1', true).getValue('nameStr');  //  获取选中的name并用 "," 拼接。

转换成一个数组

var vallist =  xmSelect.get('#demo1',true).getValue('valueStr').split(',')
var namelist =  xmSelect.get('#demo1',true).getValue('valueStr').split(',')

在formData添加数组时,会有一个的问题,就是post请求会把数组拼接成一个字符串发送给服务器。

这种时候有两种解决方案
一、后台拿到字符串后,再通过截取字符串来生成数组

二、对数据进行字符串化,即JSON.stringify()

1.创建formData传递参数,这里把获取到的多选的值塞进formData中并把xmelect自带的select删除
let formData = new FormData();
 formData.append('vallist ',JSON.stringify(vallist))
 formData.delete('select')
1.创建formData,直接以提交整个表单的形式,不用一个个字段塞值,这里把获取到的多选的值塞进formData中
并把xmelect自带的select删除
var formData = new FormData($("#contract_form")[0]);
 formData.append('vallist ',JSON.stringify(vallist))
 formData.delete('select')
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于 layui xmselect 组件,要实现下拉树的多选功能,可以按照以下步骤进行操作: 1. 首先,确保你已经引入了 layuixm-select 的相关文件。 2. 在页面中创建一个用于显示下拉树的元素,例如一个 `<select>` 标签,给它一个唯一的 id。 ```html <select id="tree-select" xm-select="tree-select"></select> ``` 3. 在 JavaScript 中初始化 xm-select,并进行配置,包括数据源、多选等设置。 ```javascript layui.use(['xmSelect'], function() { var xmSelect = layui.xmSelect; // 构造数据源 var data = [ { name: 'Node 1', value: 1, children: [ { name: 'Node 1-1', value: 11, children: [ { name: 'Node 1-1-1', value: 111 }, { name: 'Node 1-1-2', value: 112 } ] }, { name: 'Node 1-2', value: 12 } ] }, { name: 'Node 2', value: 2, children: [ { name: 'Node 2-1', value: 21 }, { name: 'Node 2-2', value: 22 } ] } ]; // 初始化 xm-select var treeSelect = xmSelect.render({ el: '#tree-select', style: { width: '240px' }, name: 'tree-select', layVerify: 'required', tips: '请选择', tree: { show: true, strict: false, showLine: true, clickCheck: true, checkStyle: 'checkbox' }, data: data }); }); ``` 在上述代码中,我们创建了一个具有多层级结构的数据源,并使用 `xmSelect.render` 方法初始化了一个下拉树的多选组件。其中,`el` 参数指定了要渲染的元素的 id,`style` 参数指定了组件的宽度,`name` 参数指定了提交表单时的名称,`layVerify` 参数指定了验证规则,`tips` 参数指定了默认提示信息,`tree` 参数用于配置下拉树相关的设置,`data` 参数指定了数据源。 4. 可以通过 `treeSelect.getValue()` 方法获取当前选中的值,以及其他一些方法操作下拉组件。 注意:在上述示例中,我们使用layui 的模块化加载方式来引入并使用 xmSelect 组件。确保在页面中正确引入 layuixm-select 的相关文件后,即可按照上述方式进行使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值