layui动态拼接下拉框 多选数据 不回显

提问 未结 10 1643
揮靃
揮靃 2018-8-9
悬赏:20飞吻
版本:layui 2.x 浏览器:chrome
formSelects-v4.1

先贴代码

<select name="assistAuditor" lay-filter="auxiliary_people"  xm-select="select1" xm-select-search="/departUser/queryUserCombox1" id="assistAuditor"  flagName="assistAuditorID"></select>



发送请求动态拼接下拉框,数据回显显示选中下拉框

formSelects.value('select1',[data.assistAuditorID]);
多选下拉框没有回显


数据格式:a3e1a28e757f425ca50d,69a7be02095e44f09fa1






求问各路大神为什么回这样?欢迎各路大神来怼



回帖
  • data.assistAuditorID的值是一个字符串?还是什么?如果是的话这样子坑定不行,要用逗号把这个字符串分割成一个数组再执行赋值,
    formSelects.value('select1', value.split(','))
    0 回复
  • 帮你等下,希望有人能帮到你
    0 回复
  • 揮靃
    2018-8-10
    @岁月小偷 @岁月小偷
     console.log("辅助审核人id:"+data.assistAuditorID);
    var assistAuditArry = data.assistAuditorID.split(",");
    console.log("辅助审核人id数组:"+assistAuditArry);
    formSelects.value('select1',assistAuditArry);


    打印数据:
    辅助审核人id:a3e1a28e757f425ca50d,69a7be02095e44f09fa1,30e52e5256c044d6bb50,14c17a7a8493455ab7c1

    辅助审核人id数组:a3e1a28e757f425ca50d,69a7be02095e44f09fa1,30e52e5256c044d6bb50,14c17a7a8493455ab7c1
    我这么改写也是不行 我接收到的数据确实是字符串 转换成数组还是不显示,

    formSelects.value('select1',['a3e1a28e757f425ca50d','69a7be02095e44f09fa1','30e52e5256c044d6bb50','14c17a7a8493455ab7c1'])



    我这么写死也不显示,不知是不是因为不能用字符串数组?还是其他的原因
    0 回复
  • @揮靃 原来是一个逗号连接的字符串,split之后就变成一个数组,但是你直接输出在控制台,会把数组tostring又变成了逗号分隔的字符串了,formSelects.value()记得第二个参数是要一个数组,所以字符坑定是不可以的,数组了还不行这个就要好好检查检查了,你设置值的时候里面的多选的数据有了吗?,有没有一个更加完整的代码,我想看下你执行顺序是啥,或者你自己检查检查,在value设置值的时候里面的多选选项是否已经准备好了,还是说value之后还有执行formselects.data之类的操作,这个data最后会执行formselects.value(id, [])这样子的
    0 回复
  • 揮靃
    2018-8-10
    @岁月小偷
    <select name="assistAuditor" lay-filter="auxiliary_people"  xm-select="select1" xm-select-search="/departUser/queryUserCombox1" id="assistAuditor" flagName="assistAuditorID">
    </select>




    $.ajax({
    url:'/reportApprovalHandler/queryAcceptInfo',
    type:'post',
    async: false,
    data: {case_id:caseBasicID},
    dataType:'json',
    success:function(data){
    // console.log(JSON.stringify(data));
    // console.log(data);
    if(data.msg == "havedata"){

    $("#searchFormShouLi").formSerialize(data);
    console.log("辅助审核人id:"+data.assistAuditorID);
    var assistAuditArry = data.assistAuditorID.split(",");
    // console.log("辅助审核人id数组:"+assistAuditArry);
    formSelects.value('select1',assistAuditArry);
    // formSelects.value('select1',['a3e1a28e757f425ca50d','69a7be02095e44f09fa1','30e52e5256c044d6bb50','14c17a7a8493455ab7c1']);
    acceptAdviceIndex = layedit.build('shoulicontent');
    $("#suitResponding").addClass("layui-hide");
    if(data.acceptFlag =="0"){
    $("#suitResponding").addClass("layui-hide");
    }else{
    $("#suitResponding").removeClass("layui-hide");
    }


    }else{
    initTime();
    $("#acceptPerson").val("秦风");

    }
    // alert("data.assistAuditorID");

    form.render();
    },
    error:function(){
    layer.msg("添加受理信息失败!");
    }
    });
    这是我代码的执行顺序 ,第一行的select表现是写在html文件里的,我前端有点坑,我的理解是先加载html静态页面然后会加载相应的js文件,我的请求是写在html中我的理解就是会先发送请求获得多选下拉数据然后页面加载结束之后 dom结构加载完成就会执行我上述的ajax请求不知道我这么理解对不对?


    完成版js代码:



    layui.config({
    debug: false,//这样外部加载的节点,应该可以调用的到
    base: '../../../../publicresource/src/js/'
    }).extend({
    formSelects: 'formSelects-v4'
    });;

    layui.use(['form','table','jqueryExtend','laydate','element','jquery','layedit','formSelects'], function() {
    var $ = layui.jquery,
    layerTips = parent.layer === undefined ? layui.layer : parent.layer, //获取父窗口的layer对象
    layer = layui.layer, //获取当前窗口的layer对象
    form = layui.form,
    laydate = layui.laydate,
    element = layui.element,
    layedit = layui.layedit,
    formSelects = layui.formSelects,
    table = layui.table;


    //初始化日期各个下拉框
    laydate.render({elem:'#approalAcceptTime'});//受理时间
    laydate.render({elem:'#approalCaseJZSJ'});//截止日期


    //创建文本编辑器

    var acceptAdviceIndex = layedit.build('shoulicontent');

    configMenuSelet();
    function configMenuSelet(){
    $.ajax({
    url: '/departUser/queryUserCombox',
    async:false,
    cache:false,
    dataType: "text", //可以是text,如果用text,返回的结果为字符串;如果需要json格式的,可是设置为json
    success: function(data) {

    $('#searchFormShouLi select[flagName="mainAuditor"]').append(data);
    // $('#searchFormShouLi select[flagName="assistAuditorID"]').append(data);

    },
    error:function(){
    layer.msg("添加受理人员信息失败!");
    }
    }) ;


    }

    element.render();
    form.render();

    form.on('radio(AdmiSelect)', function(data){
    // console.log("data.value:"+data.value);
    var selectVal = data.value;
    if(selectVal=='0'){
    $("#suitResponding").addClass("layui-hide");
    }else{
    $("#suitResponding").removeClass("layui-hide");
    }

    });


    $.ajax({
    url:'/reportApprovalHandler/queryAcceptInfo',
    type:'post',
    async: false,
    data: {case_id:caseBasicID},
    dataType:'json',
    success:function(data){
    // console.log(JSON.stringify(data));
    // console.log(data);
    if(data.msg == "havedata"){

    $("#searchFormShouLi").formSerialize(data);
    console.log("辅助审核人id:"+data.assistAuditorID);
    var assistAuditArry = data.assistAuditorID.split(",");
    // console.log("辅助审核人id数组:"+assistAuditArry);
    formSelects.value('select1',assistAuditArry);
    // formSelects.value('select1',['a3e1a28e757f425ca50d','69a7be02095e44f09fa1','30e52e5256c044d6bb50','14c17a7a8493455ab7c1']);
    acceptAdviceIndex = layedit.build('shoulicontent');
    $("#suitResponding").addClass("layui-hide");
    if(data.acceptFlag =="0"){
    $("#suitResponding").addClass("layui-hide");
    }else{
    $("#suitResponding").removeClass("layui-hide");
    }


    }else{
    initTime();
    $("#acceptPerson").val("秦风");

    }
    // alert("data.assistAuditorID");

    form.render();
    },
    error:function(){
    layer.msg("添加受理信息失败!");
    }
    });








    });
    0 回复
  • @揮靃 你这个select目前能正常的点击下拉选项给你选择吗?还有里面的选项有没有你要设置的这些值的?
    0 回复
  • 揮靃
    2018-8-10
    @岁月小偷






    里面有我想要的数据,然后也能正常向数据库存储就是回显不出来 没想明白怎么回事
    0 回复
  • 揮靃
    2018-8-14
    @岁月小偷 能请问一下xm-select-search这个属性的路径是在什么时候加载完的吗?
    0 回复
  • 尧
    2018-12-12
    @揮靃
    你试一下用这个方法给个延时赋值看看
    setTimeout(function(){ formSelects.value('select1', 你的数组) }, 100);
    0 回复
  • 楼主方法解决了吗?我也是碰到类似问题,动态获取的数据,下拉多选没效果
    0 回复