layui数据表格中加动态下拉框并监听

下拉框
<script type="text/html" id="selectEducation">
    {{#  if(d.mDataMeasurand == null){  }}
    <select name="dataexpstr2"  lay-filter="dataexpstr3" data-value="{{d.Nid}}">
        <option value="">--请选择--</option>
    </select>
    {{#     }else{ }}
    {{ d.mDataMeasurand.dataexpstr }}
    {{#  } }}

</script>

<!--行工具栏-->
<script type="text/html" id="barDemo">
    <a class="layui-btn layui-btn-xs layui-btn-disabled" lay-event="detail">保存</a>
</script>
<!--数据表格-->
<table id="demo" lay-filter="test"></table>
<script>
    layui.use(['table', 'jquery', 'form'], function () {
        var table = layui.table;
        var form = layui.form;
        var $ = layui.jquery;
        var tableObject;
        //第一个实例
        tableObject = table.render({
            id: 'terminalList',
            elem: '#demo'
            , height: 500
            // , url: 'https://192.168.0.68:8081/FDatameasurandXmd/findAll' //数据接口
            , url: 'https://localhost:8080/findAll' //数据接口
            //, page: true //开启分页
            , method: 'post'
            , toolbar: true
            , cols: [[ //表头
                {field: 'gDataname', title: '数据', align: 'center'}
                , {
                    field: 'Nid', title: '数据名称', templet: '#selectEducation'
                    , align: 'center'
                }
                , {
                    field: '', title: '匹配状态', align: 'center', templet: function (d) {
                        if (d.mDataMeasurand == null) {
                            return "未匹配";
                        } else {
                            return "已匹配";
                        }
                    }
                }  //
                , {fixed: 'right', width: 150, align: 'center', toolbar: '#barDemo'} //这里的toolbar值是模板元素的选择器
            ]]
            , done: function (res, curr, count) {
                tabData = res.data;

                //动态插入  边缘代理数据名称  读取 m_data_measurand
                $.ajax({
                    url: "https://localhost:8080/findByName",
                    data: {},
                    dataType: "json",
                    type: "post",
                    success: function (res1) {
                        $(res1).each(function (i) {
                            // console.log("aaa"+res1[i].ndataid+","+res1[i].dataexpstr)
                            var option = $('<option value="' + res1[i].ndataid + '">' + res1[i].dataexpstr + '</option>');
                            $("select[name = 'dataexpstr2']").append(option);
                        })
                        form.render('select');
                    }
                });

                //数据渲染完的回调。
                //由于layui 设置了超出隐藏,所以这里改变下,以兼容操作按钮的下拉菜单
                $(".layui-table-body, .layui-table-box, .layui-table-cell").css('overflow', 'visible');
            }
        });


        var flag;
        //通过下拉框监听事件 拿到gDataid
        var optionvalue;
        var i =1;
        form.on('select(dataexpstr3)', function (data) {
                // $(data.elem).attr
                if( i == 1  && data.elem.getAttribute("id") == null){
                    $(data.elem).attr("id", "a1");
                    i = "a1";
                }

                if (optionvalue != '' && i== data.elem.getAttribute("id")) {
                    optionvalue = data.value;
                    // $(data.elem).attr("id", "a"+(i++));// ???
                    // flag = "false";
                    let tr = $(data.elem).parents()[2]; //拿到父节点中第二个父节点
                    let tmp = $(tr).children()[3] //拿到父节点中的第三个子节点
                    $(tmp).children().children().removeClass('layui-btn-disabled') //拿到第三个子节点的子节点的子节点然后删除class 中的layui-btn-disabled样式
                    console.log(data.elem.getAttribute("id"))
                    //  console.log($("#a1"))
                    // console.log($(data.elem))
                }else {
                    layer.msg("选中行中数据没保存,请先保存");
                    $(data.elem).val('');
                    form.render('select');
                    return false
                }
          
            console.log("第一次赋值:" + optionvalue)
        })

        
//监听工具条   行操作
        console.log("给他们用的:" + optionvalue)
        table.on('tool(test)', function (obj) { //注:tool 是工具条事件名,test 是 table 原始容器的属性 lay-filter="对应的值"
            var data = obj.data; //获得当前行数据
            var layEvent = obj.event; //获得 lay-event 对应的值(也可以是表头的 event 参数对应的值)
            var tr = obj.tr; //获得当前行 tr 的 DOM 对象(如果有的话)

            if (layEvent === 'detail') { //保存
                console.log("拿到" + optionvalue)
                // console.log($("#Nid").val()+","+data.gDataname)
                $.ajax({
                    url: "https://localhost:8081/xxx",
                    data: {
                        gDataname: data.gDataname,
                        gDataid: optionvalue
                    }, dataType: "json",
                    type: "post",
                    success: function (res) {
                        //修改 m_data_measurand中的状态
                    }
                });
                //  console.log($("#Nid").val())
                $.ajax({
                    url: "https://localhost:8081/xxxx",
                    data: {
                        ndataid: optionvalue
                    },
                    dataType: "json",
                    type: "post",
                    success: function (res1) {

                    }
                });
                // 点击保存后i修改为1
                i=1;
                window.location.reload();
            }
        });


    })
</script>

layui数据表格中使用下拉框,可以通过两种方式实现:一种是使用表格的编辑功能,另一种是使用自定义列模板。 1. 使用表格的编辑功能: - 首先,在表格的列定义中,设置需要使用下拉框的列的edit属性为"text",表示该列可编辑。 - 然后,在表格数据中,为需要使用下拉框的列设置一个lay-verify属性,用于校验输入的值。 - 最后,在表格的渲染时,调用form.render()方法,使下拉框生效。 2. 使用自定义列模板: - 首先,在表格的列定义中,设置需要使用下拉框的列的templet属性为一个函数,用于自定义列的显示内容。 - 在该函数中,可以通过返回一个HTML字符串来定义下拉框的HTML结构,并绑定相应的事件处理函数。 - 最后,在表格的渲染时,调用form.render()方法,使下拉框生效。 下面是一个示例代码,演示了如何在layui数据表格中使用下拉框: ```javascript // HTML部分 <table id="demo" lay-filter="test"></table> // JavaScript部分 layui.use(['table', 'form'], function(){ var table = layui.table; var form = layui.form; // 渲染表格 table.render({ elem: '#demo', url: '/api/data', cols: [[ {field: 'id', title: 'ID', width: 80}, {field: 'name', title: '姓名', edit: 'text'}, {field: 'gender', title: '性别', templet: '#genderTpl'} ]], page: true }); // 自定义列模板 var genderTpl = function(d){ var options = '<option value="男">男</option><option value="女">女</option>'; return '<select lay-filter="gender" lay-verify="required">' + options + '</select>'; }; // 将模板注册到layui的模板引擎中 layui.laytpl(genderTpl).render({}, function(html){ $('#genderTpl').html(html); }); // 监听下拉框的change事件 form.on('select(gender)', function(data){ console.log(data.value); // 获取选中的值 }); // 渲染表单 form.render(); }); ``` 在上述示例中,通过设置edit属性为"text",实现了姓名列的编辑功能;通过设置templet属性为一个函数,实现了性别列的自定义列模板。同时,通过监听下拉框的change事件,可以获取选中的值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值