form表单的submit()方法不会调用onsubmit事件,不会校验

<form id="form1" name="form1" method="post" action="a.html" onsubmit="return check()">

   …………………………

   ---------------------

<td colspan="3"><input type="button"  onclick="this.form.submit()"value="查询" />

</form>

 

 

 this.form.submit() 不会触发 form表单的onsubmit事件

可以这样写:

<input type="button" onclick="if(this.form.fireEvent('onsubmit')==false){return};this.form.submit();" value="查询"/>

 

注:

1.fireEvent触发事件
2.attachEvent绑定事件
3.cancelEvent取消事件冒泡

 

### Vant 表单验证的实现与使用 在 Vant 框架中,`van-form` 组件提供了强大的功能来处理表单数据以及执行字段级别的校验。通过 `van-field` 子组件,开发者能够轻松定义必填项、格式校验规则以及其他交互行为。 #### 基本概念 `van-form` 是一个容器组件,用于包裹多个 `van-field` 或其他自定义输入控件。它支持提交事件监听和全局校验逻辑[^2]。以下是其实现方式的具体说明: #### 实现方法 1. **绑定模型** 使用 `v-model` 将每个 `van-field` 的值绑定到 Vue 数据对象中的变量上。这使得可以通过编程访问这些值并对其进行操作。 2. **设置校验规则** 利用 `rules` 属性为每一个字段指定其对应的校验条件。例如,手机号码需要满足特定正则表达式;邮箱地址也应遵循标准格式。 3. **触发校验** 提交按钮点击时调用 `validate()` 方法手动触发表单项的校验过程。如果所有项目都符合条件,则返回成功状态;否则会显示错误提示信息给用户查看。 4. **动态更新界面反馈** 当某个字段未通过检验时,自动在其旁边显示出错消息。此特性增强了用户体验,帮助他们快速定位问题所在之处。 下面是一个完整的代码示例展示了如何配置上述提到的功能点: ```html <template> <van-form @submit="onSubmit"> <!-- 手机号码 --> <van-field v-model="phone" name="phone" label="手机号" placeholder="请输入手机号" :rules="[{ required: true, message: '请填写手机号' }, { pattern: /^1[3-9]\d{9}$/, message: '手机号格式正确'}]" /> <!-- 邮箱 --> <van-field v-model="email" name="email" type="email" label="邮箱" placeholder="请输入邮箱" :rules="[{ required: true, message: '请填写邮箱'}, {pattern:/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/,message:'邮箱格式有误'}]" /> <!-- 图片上传 --> <van-field name="uploader" label="图片上传"> <template #input> <van-uploader v-model="fileList" :after-read="afterRead" max-count="1" accept=".jpg,.png" :before-upload="(file) => checkFileSize(file)" /> </template> </van-field> <div style="margin: 16px;"> <van-button round block type="info" native-type="submit">提交</van-button> </div> </van-form> </template> <script> export default { data() { return { phone: '', email: '', fileList: [] }; }, methods:{ onSubmit(values){ console.log('form values:',values); }, afterRead(file){ this.fileList.push(file); // 添加文件至列表 }, checkFileSize(file){ const maxSize = 5 * 1024 * 1024; // 最大允许尺寸为5MB if (file.size > maxSize){ alert(`文件过大,请选择小于${maxSize / (1024*1024)} MB 的文件`); return false; } return true; } } }; </script> ``` 以上代码片段实现了基本的表单结构,并包含了必要的校验机制。 #### 注意事项 为了确保最佳实践,在实际开发过程中还需要注意以下几点: - 对于复杂的业务场景可能需要用到更高级别的校验库比如 async-validator 来增强灵活性; - 如果涉及到异步请求或者依赖外部服务完成某些特殊类型的验证(如验证码有效性),可以结合 Promise 和 custom validator 函数一起工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值