直接移除 lay-affix="clear" 属性即可,这是最干净、最可控的方式;Layui 的清除图标由该属性触发注入,不加则不出现,CSS 隐藏会引发占位、热区失效及动态渲染复现等问题。

直接移除 lay-affix="clear" 属性即可,这是最干净、最可控的方式。Layui 的清除图标不是浏览器原生行为,而是框架主动注入的 DOM 元素,不加这个属性,它根本不会出现。
为什么不能靠 CSS 隐藏 .layui-icon-clear
很多开发者尝试用 display: none 或 visibility: hidden 去隐藏图标,但会引发连锁问题:
- 图标容器仍占位,右侧留白或影响对齐
- 移动端热区失效(
pointer-events: none误伤父级事件委托) - 部分版本中,Layui 在
form.render()时会重新检查lay-affix并强制插入图标,CSS 隐藏只是临时掩盖
动态渲染后仍出现清除图标?检查是否误带 lay-affix
常见于以下场景:
- 模板字符串拼接时写死:
<input lay-affix="clear">,即使逻辑上不需要也一并输出 - Vue/React 等框架中,
lay-affix被当作 prop 透传,未做条件判断 - 使用
form.val()回填时,Layui 自动为已有lay-affix="clear"的字段补全图标逻辑,哪怕你已删掉属性 —— 这说明 DOM 里还残留着旧属性
排查方法:在控制台执行 document.querySelector('input').getAttribute('lay-affix'),确认返回值是 null 而非 "clear"。
全局禁用:重写 layui.form 模块的默认行为(慎用)
如果你的项目中 90% 的输入框都不需要清除图标,且无法逐个清理属性,可覆盖 Layui 内部初始化逻辑:
layui.define(['form'], function(exports) {
var form = layui.form;
var originalRender = form.render;
form.render = function(type, filter) {
// 清理所有 input 上的 lay-affix="clear"
layui.$('input[lay-affix="clear"]').removeAttr('lay-affix');
return originalRender.call(form, type, filter);
};
exports('form', form);
});
注意:此方式需在 layui.use(['form'], ...) 之前执行,且会影响所有后续 form.render() 调用。仅推荐在老项目统一收口时使用。
真正要“去掉”,就别让它出生;一旦它出现在 DOM 里,再怎么藏,都容易被框架或事件链唤醒。


















