如何在jQuery Validate规则中用ID替代name?文件上传验证问题
jQuery Validate 处理数组格式name的文件输入验证问题
问题背景
我正在为文件上传功能配置验证,因为项目一致性要求,必须继续使用已经在其他表单输入中用熟的jQuery Validate插件。但现在遇到个麻烦:文件输入的name属性是数组格式uploadedFile[],直接用完整的name值配置验证会报错,去掉括号又识别不到这个字段。我尝试通过ID(uploadedFileTest)来配置验证,但没找到可行的方法。想问问大家,jQuery Validate支持用ID配置规则吗?或者有没有更有效的解决办法?
相关代码:
HTML 输入框
<input type="file" name="uploadedFile[]" class="inputfile" id="uploadedFileTest" data-multiple-caption="{count} files selected" multiple>
现有验证JS代码
$('#shareProjectForm').validate({ ignore: [], rules: { uploadedFile: { required: true, extension: 'png|jpg|jpeg|pdf|gif' } }, messages: { uploadedFile: { required: "A file must be uploaded", extension: "You must choose a file with one of the following formats: .png, .jpg, .jpeg, .pdf or .gif" } } })
解决方案
方案1:正确使用数组格式的name属性(最简单直接)
jQuery Validate完全支持数组格式的name,只是你之前没注意到语法细节:当对象的key包含方括号这类特殊字符时,必须用引号把它包裹起来。修改你的验证配置,把uploadedFile换成带引号的"uploadedFile[]"就行:
$('#shareProjectForm').validate({ ignore: [], rules: { "uploadedFile[]": { // 用引号包裹数组name,避免语法错误 required: true, extension: 'png|jpg|jpeg|pdf|gif' } }, messages: { "uploadedFile[]": { // 对应修改messages的key required: "A file must be uploaded", extension: "You must choose a file with one of the following formats: .png, .jpg, .jpeg, .pdf or .gif" } } })
方案2:通过ID手动添加验证规则(适合偏好ID定位的场景)
如果你确实想通过ID来配置验证规则,可以使用jQuery Validate提供的rules('add')方法,单独给目标字段绑定规则,这样就不用纠结name的写法了:
// 先初始化表单的基础验证配置 $('#shareProjectForm').validate({ ignore: [] // 确保不会忽略文件输入框 }); // 给指定ID的文件输入框添加验证规则 $('#uploadedFileTest').rules('add', { required: true, extension: 'png|jpg|jpeg|pdf|gif', messages: { required: "A file must be uploaded", extension: "You must choose a file with one of the following formats: .png, .jpg, .jpeg, .pdf or .gif" } });
额外提醒
- 别忘了引入
additional-methods.js!extension这个验证规则不是jQuery Validate核心库自带的,必须加载这个额外方法文件才能生效。 - 因为你的输入框有
multiple属性,required规则会自动验证是否至少选择了一个文件,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Paul
相关产品推荐
相关产品推荐

