关于form表单的坑

博客介绍了form表单的两个问题及解决办法。一是当form表单中仅有一个type='text'的input框时,敲击回车会触发表单提交,可添加一个隐藏的input框来阻止;二是form表单里的button按钮默认会submit表单,添加type='button'属性可避免提交。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、form表单里面有且只有一个type='text'的input框的时候,敲击回车会触发表单提交事件。。。。。

如果想阻止这种情况,在该form表单里面添加一个style='display:none;'的input框如下:

<!-- 防止按回车刷新界面,如果form里面只有一个文本框的话,默认回车会提交表单 -->
                           <input id="hiddenText" type="text" style="display:none">

 

二、form表单里面的button按钮默认也会submit表单,在button标签里面添加type='button'这个属性   点击按钮就不会提交表单了

 

<think>好的,我现在需要帮助用户解决在使用element-ui的el-select多选组件时的表单校验问题。首先,我得回忆一下用户提供的引用内容,看看有没有相关的线索。 根据引用[1],用户提到了在el-select多选时使用form表单的rules进行验证,并添加了change事件。这里可能涉及到校验规则的编写和触发时机的选择。引用[2]指出,当绑定的值初始化为空字符串时,会导致自动校验错误,建议将初始值设为空数组。引用[3]也提到了类似的问题,说明初始值设置的重要性。 接下来,我需要整理出实现表单校验的具体步骤。首先,数据结构方面,el-select多选应该绑定一个数组,所以form.receivers的初始值应该是空数组而不是空字符串,这样可以避免初始校验错误。然后,校验规则部分,可能需要自定义验证器,检查数组是否为空。如果用户使用的是element-ui的内置规则,比如required,可能需要结合type: 'array'来确保正确触发校验。 另外,触发时机也是一个关键点。默认的trigger可能是'change'或者'blur',但对于多选来说,选择选项后change事件会更及时触发校验。还需要注意,当用户清空选择时,是否能够正确触发校验,确保提示信息及时更新。 还有可能遇到的问题包括初始值不正确导致的校验错误,这时候需要检查data中的初始化值是否为数组。另外,自定义验证函数中需要正确处理value的类型,比如判断是否是数组以及长度是否大于零。 最后,可能需要给出一个完整的示例代码,包括模板中的el-form、el-select结构,以及data和rules的配置,帮助用户更好地理解如何实现。同时,提醒用户注意初始值设置和触发事件的选择,避免常见的。</think>以下是在Element-UI中实现el-select多选表单校验的完整方法(分步骤说明): 1. **数据结构设置** - 多选值必须使用数组类型初始化 ```javascript data() { return { form: { receivers: [] // 必须初始化为数组而非空字符串 }, rules: { /*...*/ } } } ``` 2. **校验规则配置**(两种实现方式) *方式一:使用内置规则* ```javascript rules: { receivers: [ { required: true, message: '请选择接收人', type: 'array', // 必须声明类型 trigger: 'change' }, { type: 'array', min: 1, message: '至少选择1个接收人', trigger: 'change' } ] } ``` *方式二:自定义验证器* ```javascript const validateReceivers = (rule, value, callback) => { if (!value || value.length === 0) { callback(new Error('请选择接收人')); } else { callback(); } }; rules: { receivers: [ { validator: validateReceivers, trigger: 'change' } ] } ``` 3. **模板关键配置** ```html <el-form-item label="接收人" prop="receivers"> <el-select v-model="form.receivers" multiple filterable @change="handleSelectChange" <!-- 推荐添加change事件 --> > <!-- 选项内容 --> </el-select> </el-form-item> ``` **常见问题解决方案**: 1. **初始校验报错问题**:将初始值设为空数组而非空字符串可避免初始化校验失败[^2] 2. **校验不触发问题**:确保trigger事件与操作匹配,多选建议使用'change'事件[^1] 3. **清空后校验残留**:在清空操作后手动触发校验 ```javascript handleClear() { this.$refs.form.validateField('receivers'); } ``` **完整示例**: ```javascript export default { data() { return { form: { receivers: [] // 正确初始化 }, rules: { receivers: [ { required: true, type: 'array', message: '请选择至少一个接收人', trigger: 'change' } ] }, users: [...] // 选项数据 } }, methods: { handleSelectChange() { this.$refs.form.validateField('receivers'); } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值