layui upload 默认单文件上传,启用多选的唯一条件是配置 multiple: true 或 input 标签含 multiple 属性;number: 1 无效,choose 中累积文件属逻辑错误,ie9- 不支持 obj.files。

layui upload 默认就是单文件上传,不用额外配置;如果你发现能选多个,说明 somewhere 多了一个 multiple。
检查初始化配置里有没有 multiple: true
这是最常见的误配。只要你在 upload.render() 里写了 multiple: true,Layui 就会启用多选模式,系统文件选择器也会允许勾选多个文件:
- ✅ 正确(单文件):
multiple: false或直接不写这一项 - ❌ 错误(变多选):
multiple: true—— 即使你没打算用,删掉它 - ⚠️ 注意:
number: 1没用,它只在multiple: true下生效,且控制的是“单次最多选几个”,不是“总共只能传一个”
检查 DOM 中的 <input type="file"> 是否带 multiple 属性
Layui 会读取绑定元素上的原生属性。如果你用了显式的 <input> 标签(比如通过 bindAction 或手动写在 HTML 里),它自带 multiple 属性就会覆盖 JS 配置:
- ❌ 错误示例:
<input type="file" multiple> - ✅ 正确写法:
<input type="file">(无multiple) - ? 更稳妥的做法:用自定义按钮(如
<button></button>)触发,完全不暴露<input>,自然不会有多选干扰
别在 choose 回调里缓存或累积文件
有人想“先选再统一上传”,于是在 choose 里把 obj.files 推进全局数组,结果每次选都追加——这不是多选,是你自己搞出来的逻辑错误:
-
obj.files每次都是新实例,但你的数组不清空,就变成“越选越多” - ✅ 正确做法:不干预流程,让 Layui 自己走单次上传;或在
choose里立刻调obj.upload() - ⚠️ 如果非要手动控制,每次进入
choose先清空引用:selectedFile = obj.files[0],别用push - IE9- 下
obj.files是undefined,会退化为表单提交,行为不可靠,不建议兼容
真正起效的只有 multiple 的有无,不是参数名、不是 number、不是 exts。只要没开 multiple,浏览器原生选择器就只让你勾一个,Layui 也只给你一个 File 对象 —— 这个事实容易被层层封装掩盖,但它是底层铁律。











