selectpage数据自定义校验

项目场景:展会数据分配,当选择分配的展会后,需要请求后台校验这条数据是否已经存在,避免重复分配。

html

js

    // 自定义校验:参展商是否可以分配
    $.validator.config({
        rules: {
            unique: function (element) {
                return $.ajax({
                    url: 'zlf/actor/check',
                    type: 'POST',
                    data: {exhid: $("#c-exhid").val(), comid: $("#comid").val(), value: element.value},
                    dataType: 'json'
                });
            }
        }
    });
    

后端

    public function check(){
        $exhid = $this->request->request("exhid");
        $comid = $this->request->request("comid");
        $result = $this->zlfdb()->table('Actor')
            ->field('exhid,comid')
            ->where(['exhid'=>$exhid,'comid'=>$comid])
            ->find();
        if ($result) {
            //失败
            $this->error("该展商已在该展会",'',$result);
        } else {
            //成功
            $this->success();
        }
    }

### 如何在 Layui 中实现选择自定义地点功能 要在 Layui 中实现选择自定义地点的功能,可以通过结合 `form` 表单组件和 `laytpl` 模板引擎来完成。以下是具体的实现思路: #### 1. 使用 Form 组件创建输入框并设置验证规则 Layui 的 Form 组件支持对表单项进行校验,可以为地址字段添加必填或其他验证逻辑[^1]。 ```html <div class="layui-form-item"> <label class="layui-form-label">自定义地点</label> <div class="layui-input-block"> <input type="text" name="customLocation" required lay-verify="required" placeholder="请输入自定义地点" autocomplete="off" class="layui-input"> </div> </div> ``` 上述代码片段展示了如何创建一个带有必填验证的文本输入框用于录入自定义地点。 --- #### 2. 处理 Select 下拉框提示位置错误的问题 如果使用下拉框作为地点选项的一部分,则可能遇到默认弹窗位置不正确的情况。此时可通过调整样式或手动控制弹出层的位置解决该问题。 一种常见做法是在初始化时绑定事件监听器,在显示 dropdown 菜单前动态计算其定位参数: ```javascript layui.use(['form', 'layer'], function() { var form = layui.form; var layer = layui.layer; // 修改 select 提示框位置 document.addEventListener('DOMNodeInserted', function(e) { let target = e.target; if (target.classList && target.classList.contains('layui-select-title')) { setTimeout(() => { // 延迟执行以确保 DOM 已完全渲染 const ddMenu = document.querySelector('.layui-layer-page.layui-select-page'); if(ddMenu){ ddMenu.style.top = `${parseInt(target.getBoundingClientRect().bottom)}px`; ddMenu.style.left = `${parseInt(target.getBoundingClientRect().left)}px`; } }, 0); } }); form.render(); }); ``` 此脚本利用 MutationObserver 或类似的机制捕获新节点插入操作,并重新设定关联菜单容器的具体坐标值。 --- #### 3. 动态加载地区数据并通过模板展示 对于复杂的多级联动场景(如省市区),推荐借助远程接口获取区域列表,并配合 templet 属性定制单元格内容呈现形式[^2]。 假设有如下 HTML 结构表示表格列配置项之一: ```html <table id="locationTable" lay-filter="locationFilter"></table> <script type="text/html" id="rowToolTpl"> {{ d.province }} - {{ d.city }} - {{ d.district }} </script> ``` 接着编写对应的 JavaScript 初始化逻辑: ```javascript layui.use(['table', 'util'], function(){ var table = layui.table; // 渲染表格实例 table.render({ elem: '#locationTable', url:'/mock/locations.json' ,// 数据源路径 cols: [[ {field:'province', title:'省份'}, {field:'city', title:'城市'}, {field:'district', title:'区县'}, {title:'完整地址', toolbar:'#rowToolTpl'} // 应用预定义布局方案 ]], page:true, done:function(res, curr, count){ /* 可选回调 */ } }); }); ``` 这里采用 RESTful API 方式请求后台服务器返回 JSON 格式的地理编码集合;同时指定工具栏槽位指向外部声明好的字符串模版资源文件[#id=rowToolTpl]^[]^2。 --- #### 总结说明 综上所述,通过合理运用 LayUI 提供的基础控件以及扩展能力,能够轻松构建满足业务需求的地图标注选取界面。不仅限于简单的文字填写或者固定枚举值的选择,还可以进一步探索更高级别的交互体验设计模式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值