LayUI+JQuery实现动态表单(搜索条件的动态增减)

 

效果图:

image.png

元素解析:

每一行代表一个 <form>,根据 id 来辨别,通过 layui 的 form.val() 方法获取值

注意

    layui 的 table 使用 where 会有缓存,所以需要在每次执行完查询之后将 where 的缓存内容置为空 

    即 done: function (res, curr, count) { this.where = {}; }

    8.11改正:但是这么做又会出现一个问题,那就是点击下一页或者别的页数的时候只会传递 page 和 limit 参数,查询参数全部清除。

   解决方法:使用第二种表格重载的方式

下面是官方提供的两种重载方式

很多时候,你需要对表格进行重载。比如数据全局搜索。以下方法可以帮你轻松实现这类需求(可任选一种)。

语法说明适用场景
table.reload(ID, options)参数 ID 即为基础参数id对应的值,见:设定容器唯一ID
参数 options 即为各项基础参数
所有渲染方式
tableIns.reload(options)参数同上
tableIns 可通过 var tableIns = table.render() 得到
仅限方法级渲染

 

代码

html 部分

<button class="layui-btn layui-btn-normal" id="add">添加条件</button>
<button class="layui-btn layui-btn-danger" id="del">删除选中条件</button>
<button style="margin-left: 10px;" class="layui-btn" type="button" id="search"><i
                            class="layui-icon layui-icon-search"></i>查询</button> 
<div id="searchForm"></div>

js 部分(我的第一个select里的内容是从后端拉取的,所以需要拼接)

form的拼接内容可以自己定义,建议先写一个静态的form看看效果,然后将代码复制到nodepade++里面按 ctrl+j 即可变为一行

layui.use('form', function () {
                var form = layui.form;
                var num = 0;
                $("#add").click(function () {
                    num++;
                    var htmls = '<form id="fnum' + num + '" class="layui-form" lay-filter="fnum' + num + '"><br /> <div class="layui-input-inline"><input type="checkbox" name="ifDel' + num + '" value="fnum' + num + '" lay-skin="primary"></div>                             <div class="layui-input-inline">                                 <select id="columns" name="field"></select>                             </div>                             <div class="layui-input-inline" style="margin-left: 20px;">                                 <select id="type" name="type">                                     <option value="">请选择查询方式</option>                                     <option value="term">term</option>                                     <option value="match">match</option>                                 </select>                             </div>                             <div class="layui-input-inline" style="margin-left: 20px;">                                 <input type="text" name="value" id="value" lay-verify="title" placeholder="输入匹配值"                                     class="layui-input">                             </div>                         </form>';
                    $("#searchForm").append(htmls);
                    var htmls = '<option value="">请选择字段名</option>';
                    for (var x in columnData) {
                        htmls += '<option value = "' + columnData[x].columnName + '">' + columnData[x].columnName + '</option>'
                    }
                    $("#fnum" + num + " #columns").html(htmls);
                    // 重新渲染一下
                    form.render();
                })

                var delList = [];
                var index = 0;
                // 删除查询条件
                $("#del").click(function () {
                    $('input[type="checkbox"]:checkbox:checked').each(function (index, value) {
                        var id = $(this).val();
                        $("#" + id).remove();
                        delList[index++] = id;
                    });
                })

                //监听搜索按钮
                $("#search").click(function () {
                    var list = [];
                    console.log(delList);
                    for (var i = 1, j = 0; i <= num; i++) {
                        if ($.inArray('fnum' + i, delList) == -1) {
                            var data = form.val('fnum' + i);
                            list[j++] = data;
                        }
                    }
                    console.log(list);
                    table.reload('table4', {
                        url: '/cluster/data/conditions',
                        method: 'post',
                        where: {
                            "clusterId": $("#clusterId").val(),
                            "indexName": $("#indexName").val(),
                            "list": list,
                            "status": 0
                        },
                        contentType: 'application/json;charset=UTF-8',
                        done: function (res, curr, count) { this.where = {}; }
                    })
                })
            });

 

这是修改后的

 var tableIns = table.render()
                    tableIns.reload({
                        elem: '#table4',
                        url: '/cluster/data/conditions',
                        method: 'post',
                        contentType: 'application/json;charset=UTF-8',
                        where: {
                            "clusterId": $("#clusterId").val(),
                            "indexName": $("#indexName").val(),
                            "list": list,
                            "status": x++
                        },
                        cellMinWidth: 150
                        , cols: [col_arr]
                        , page: true
                        , done: function (result) {
                            if (result.message == "fail") {
                                layer.alert("ES查询不允许深度跳页,请添加查询条件后重试!");
                            }
                        }
                    })
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要循环获取特定表单的ID值,可以使用jQuery的each循环函数来实现。假设目标表单的类名是"target-form",则可以在jQuery代码使用以下语法: var idValues = []; $(".target-form").each(function() { var id = $(this).attr("id"); idValues.push(id); }); console.log(idValues); 上述代码首先定义了一个空数组" idValues",然后使用jQuery的each函数循环遍历所有类名为"target-form"的表单,并逐个获取它们的ID值。在循环体使用jQuery的attr方法来获取当前表单元素的ID属性值,然后将它加入到" idValues"数组。最后输出所有ID值。 需要注意的是,由于在一个HTML页面不能有两个ID相同的元素,因此这种方式只适用于特定表单只出现一次的情况。如果有多个相同类名的表单,可以给它们分别添加不同的ID,或者通过其他方式来区分它们。 ### 回答2: 使用 layuijQuery 来获取表单 id 值的方式有许多种。以下是一种可能的实现方式: 首先,通过 layui 的 form 模块来获取表单的值。在获取表单元素的同时,要为每个表单元素添加一个 id 属性,以便后面通过 jQuery 来获取该元素的值。 例如,我们可以在 HTML 添加一个表单元素和一个按钮: ``` <form class="layui-form"> <div class="layui-form-item"> <label class="layui-form-label">用户名</label> <div class="layui-input-inline"> <input type="text" name="username" lay-verify="required" placeholder="请输入用户名" autocomplete="off" id="username" class="layui-input"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">密码</label> <div class="layui-input-inline"> <input type="password" name="password" lay-verify="required" placeholder="请输入密码" autocomplete="off" id="password" class="layui-input"> </div> </div> <div class="layui-form-item"> <div class="layui-input-block"> <button class="layui-btn" lay-submit lay-filter="demo">提交</button> </div> </div> </form> ``` 然后,在 JavaScript ,通过以下方式来获取表单元素 id 为 username 的值: ``` layui.use(['form', 'jquery'], function(){ var form = layui.form; var $ = layui.jquery; form.on('submit(demo)', function(data){ // 表单提交后执行的操作 var username = $('#username').val(); alert('用户名为:' + username); return false; }); }); ``` 在上面的代码,我们使用layui 的 form 模块和 jQuery,在表单提交时获取 id 为 username 的表单元素的值,并弹窗显示。同样的方式也可以用来获取其他表单元素的值,只需要将代码的 #username 换成对应的表单元素 id 即可。 值得注意的是,通过 jQuery 来获取表单元素的值,需要在该元素之前所在的 DOM 节点添加 jQuery 的依赖,否则会导致无法获取到该元素的值。在上面的代码,我们已经在 layui.use 添加了依赖,因此可以正常获取表单元素的值。 ### 回答3: LayuijQuery都是常用的前端框架,它们在处理表单数据时非常方便。循环获取某个表单id值的值也是常见的需求。 以下是通过循环获取某个表单id值的值的步骤: 1.确定表单id值,如下例用formId表示: var formId = "form1"; 2. 获取表单元素的数量,通过表单元素的数量可以确定循环次数: var elementCount = $("#" + formId + " :input").length; 3. 使用for循环遍历表单元素,通过元素的ID获取元素的值: for (var i = 0; i < elementCount; i++) { var elementId = $("#" + formId + " :input").eq(i).attr("id"); var elementValue = $("#" + formId + " #" + elementId).val(); } 上述代码块,eq(i) 方法用于获取表单元素的索引,attr("id") 方法获取元素的ID,val() 方法获取元素的值。 通过以上步骤,就可以实现循环获取某个表单id值的值,便于在表单验证、提交等场景使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值