最稳妥方式是用data.elem[data.elem.selectedindex].text获取选中文本,因data.elem为原始select dom可直接读原生属性;误用this.innertext或data.othis.text()易出错,动态修改option后须调用form.render('select')同步。

form.on 监听 select 时怎么安全取 text
最稳妥的方式是用 data.elem[data.elem.selectedIndex].text,不是 this.innerText,也不是 data.othis.text()。因为 data.othis 是 Layui 渲染出的伪下拉项(<dd></dd>),它不实时同步文本变更;而 this 在回调里指向 data.othis,不可靠。
常见错误现象:动态增删 <option></option> 后,data.elem[data.elem.selectedIndex].text 还是旧值——问题不在取值逻辑,而在没调用 form.render('select') 同步渲染状态。
-
data.elem是原始<select></select>DOM 元素,可直接读原生属性 -
data.value只返回 value 字符串,永远拿不到 text - 必须确保
<option value="xxx"></option>和对应渲染出的<dd lay-value="xxx"></dd>的字符串完全一致(含空格、大小写)
示例:
form.on('select(down_link_name)', function(data){
var text = data.elem[data.elem.selectedIndex].text;
console.log(text); // ✅ 如 “百度”
});
不监听事件时,点击按钮后一次性获取 text 怎么写
如果只是提交前或按钮点击后读一次,没必要走 form.on 回调。直接 jQuery 查 DOM 更稳定,且绕过 Layui 渲染时机干扰。
前提:该 <select></select> 已被 Layui 初始化过(即执行过 form.render() 或页面加载自动渲染),否则 jQuery 读的是原始 HTML 状态,可能和 UI 不一致。
- 必须用带唯一
id的选择器,如$("#down_link_name option:selected") - 避免写成
$("select").find("option:selected")—— 多个 select 时会冲突 - 若用了
lay-search,不影响该选择器结果
示例:
$("#getBtn").on("click", function(){
var text = $("#down_link_name option:selected").text();
console.log(text); // ✅ 正确
});
多选 select 怎么批量取所有选中的 text
form.getvalue('filterName') 或 elem.value 只返回 value 数组,text 完全不包含。这是 Layui 表单模块的设计限制——text 属于渲染层,不参与数据流。
正确做法是绕过表单 API,用原生 DOM 遍历 option:checked 节点取 textContent.trim()。
- 用
document.querySelector('select[lay-filter="areaSelect"]')定位 select 元素 -
querySelectorAll('option:checked')天然跳过disabled和display: none的选项 - 手动设了
option.selected = true但没触发 Layui 重绘?务必补调form.render('select')
示例:
form.on('select(areaSelect)', function(data){
var selectElem = document.querySelector('select[lay-filter="areaSelect"]');
var textArray = Array.from(selectElem.querySelectorAll('option:checked'))
.map(opt => opt.textContent.trim());
console.log(textArray); // ["北京市", "深圳市"]
});
动态修改 option 后 text 拿不到最新值,为什么
根本原因不是取值代码错了,而是 Layui 内部映射没更新。Layui 渲染时会给每个 <dd></dd> 加 lay-value 属性,这个值必须和对应 <option value="xxx"></option> 的字符串完全相等,否则 selectedIndex 指向错位,连带 .text 读错。
动态添加/替换 <option></option> 后,必须立刻执行:
form.render('select');
否则:
-
data.elem.selectedIndex可能指向错误索引 -
option:checked选择器匹配不到真实勾选项 - 即使 UI 显示已选中,DOM 状态仍滞留在旧值
这一步容易被忽略,尤其在 Ajax 加载完 option 后直接读 text —— 表面看 UI 正常,实际取值已失效。











