ValidForm 官方文档

项目的需求是这样的:一个checkbox,一个input,选中checkbox的时候,需要校验input,取消选中的时候,不要校验input。

<input type='checkbox' id='switchCheckbox' />熬夜超过<input type='text' name='hour' />点,就去喝咖啡

1. 配置ignoreHidden

$(".demoform").Validform({
tiptype:1,
ignoreHidden:false
});

默认为false,当为true时对:hidden的表单元素将不做验证;

注意::hidden 表单元素 包括 type='hidden' 的表单项,也包括未显示的表单项(display:none)

但是这个配置是全局性的,无法做到灵活的开关

2. ignore 属性

<input type='text' name='name' datatype='*' ignore='ignore' />

绑定了ignore="ignore"的表单元素,在有输入时,会验证所填数据是否符合datatype所指定数据类型,没有填写内容时则会忽略对它的验证;

这个属性也无法满足需求

3. ignore(selector) 和 unignore(selector) 方法

ignore(selector)【返回值:Validform】

忽略对所选择对象的验证,不传入selector则忽略所有表单元素。

如demo.ignore("select,textarea,#name"),忽略Validform对象下所有select,textarea及一个id为"name"元素的验证。

unignore(selector)【返回值:Validform】

将ignore方法所忽略验证的对象重新获取验证效果,不传入selector则恢复验证所有表单元素。

如demo.unignore("select,textarea,#name"),恢复Validform对象下所有select,textarea及一个id为"name"元素的验证。

这两个方法正好可以解决我的需求。

思路:绑定 checkbox 的点击事件,选中时校验表单项;取消选中时,忽略校验表单项。或者,在 beforeCheck 中根据checkbox选中状态来决定是否校验表单项(代码略

4. data-data-ignore 属性

该属性在官方文档中没有介绍,原因未知。不过,在源码中确实使用到了该属性。

check:function(curform,subpost,bool){
...
//隐藏或绑定dataIgnore的表单对象不做验证;
if(settings.ignoreHidden && $(this).is(":hidden") || $(this).data("dataIgnore")==="dataIgnore"){
return true;
}
...
}

最终需求代码

// 捕获 checkbox 的点击事件
$("#switchScreenNumberCheck").click(function(){
var $checkbox = $("#switchScreenNumberCheck");
var $e = $("#switchScreenNumber");
// 判断选中状态
if ($checkbox.is(":checked")) {
// 选中则不再忽略校验
$e.data('data-ignore', '');
// 删除 input 保存的上次值(该步骤也可以放在未选中时)
delete $e.get(0).validform_lastval;
// 接着就校验 input
$validform.check(false, $e);
} else {
// 未选中则移除input的校验规则,以及错误样式和文字
$e.data('data-ignore', 'dataIgnore').removeClass('Validform_error');
$e.siblings('.Validform_wrong').text('').removeClass('Validform_wrong');
}
});
// 注意:
// Validform 在表单项值未发生改变的情况下,不会**再次**校验。
// 也就是说,第一次校验完后,如果表单项值没有改变的情况下,不会再次校验。
// 所以在上面的代码中,未选中状态下,我们移除了校验结果(错误样式和文字);
// 当再次选中时,需要再次校验(即使值没有改变) // 注意:data-data-ignore="dataIgnore"
// 该属性在官方文档中没有体现,但在源码中是存在的。
// 它的作用是:表单项的该属性值==='dataIgnore',则忽略对它的校验

当然,以上逻辑也是可以放到 beforeCheck 中的

ValidForm5.3.2 忽略表单项校验详解的更多相关文章

  1. vue.js基础知识篇(7):表单校验详解

    目录 网盘 第12章:表单校验 1.npm安装vue-validator $ npm install vue-validator 代码示例: var Vue=require("vue&quo ...

  2. 【转】vue.js表单校验详解

    官方文档:https://monterail.github.io/vuelidate/ https://github.com/monterail/vuelidate 1.npm安装vue-valida ...

  3. Skip List(跳跃表)原理详解与实现【转】

    转自:http://dsqiu.iteye.com/blog/1705530 Skip List(跳跃表)原理详解与实现 本文内容框架: §1 Skip List 介绍 §2 Skip List 定义 ...

  4. 问题:oracle select into;结果:oracle SELECT INTO 和 INSERT INTO SELECT 两种表复制语句详解

    oracle SELECT INTO 和 INSERT INTO SELECT 两种表复制语句详解 (2011-07-08 08:59:47) 转载▼ 标签: it 分类: oracle 我们经常会遇 ...

  5. SQL Server时间粒度系列----第8节位运算以及设置日历数据表节假日标志详解

    本文目录列表: 1.位运算 2.设置日历数据表节假日标志 3.总结语 4.参考清单列表   位运算   SQL Server支持的按位运算符有三个,分别为:按位与(&).按位或(|).按位异或 ...

  6. 补习系列(4)-springboot 参数校验详解

    目录 目标 一.PathVariable 校验 二.方法参数校验 三.表单对象校验 四.RequestBody 校验 五.自定义校验规则 六.异常拦截器 参考文档 目标 对于几种常见的入参方式,了解如 ...

  7. Oracle create tablespace 创建表空间语法详解

    CREATE [UNDO]  TABLESPACE tablespace_name          [DATAFILE datefile_spec1 [,datefile_spec2] ...... ...

  8. MySQL(九)之数据表的查询详解(SELECT语法)一

    这一篇是MySQL中的重点也是相对于MySQL中比较难得地方,个人觉得要好好的去归类,并多去练一下题目.MySQL的查询也是在笔试中必有的题目.希望我的这篇博客能帮助到大家! 重感冒下的我,很难受!k ...

  9. select表单元素详解及下拉列表模拟实现

    原文地址:→看过来 写在前面 select 是HTML表单元素中很常用的一个,其中很重要的几个属性常被忽略,但这几个属性却能帮助我们完成很多的功能,当然,select下拉列表默认样式很不友好,所以更多 ...

随机推荐

  1. phptorm 集成git和gitlab和一些命令

    mac: 2.phpstorm->csv->create git... 3.命令:ssh-keygen -t rsa -C"your_email@youremail.com&qu ...

  2. Java 进程和线程

    进程和线程 在并发编程中,有两个基本的执行单元:进程和线程.在Java编程语言中,通常并发编程主要与线程有关.但是进程也很重要. 计算机系统通常具有许多活动的进程和线程.即使在只有一个执行核心,因此在 ...

  3. 什么是 spring 的内部 bean?

    只有将 bean 用作另一个 bean 的属性时,才能将 bean 声明为内部 bean. 为了定义 bean,Spring 的基于 XML 的配置元数据在 <property> 或 &l ...

  4. Java 中能创建 volatile 数组吗?

    能,Java 中可以创建 volatile 类型数组,不过只是一个指向数组的引用,而不 是整个数组.我的意思是,如果改变引用指向的数组,将会受到 volatile 的保护, 但是如果多个线程同时改变数 ...

  5. Java 中的编译期常量是什么?使用它又什么风险?

    公共静态不可变(public static final )变量也就是我们所说的编译期常量,这里 的 public 可选的.实际上这些变量在编译时会被替换掉,因为编译器知道这些 变量的值,并且知道这些变 ...

  6. Python - list、tuple类型

  7. C语言之基本组成(知识点6)

    一.C程序基本组成 C程序是由语句组成的,通常包括一个或多个函数,其中有且只有一个函数称为 主函数,其函数名为main. 二.C程序的组成特点: 1.每个C程序由一个或多个函数组成.每个C程序有且仅有 ...

  8. 《剑指offer》面试题1:赋值运算函数

    面试题1:赋值运算函数 题目:如下为类型CMyString的声明,请为该类型添加赋值运算符函数 class CMyString { public: CMyString(char* pData = NU ...

  9. 六个框架,一百多条检查项目,保证PCB设计不再出错

    一.资料输入阶段1.在流程上接收到的资料是否齐全(包括:原理图.*.brd文件.料单.PCB设计说明以及PCB设计或更改要求.标准化要求说明.工艺设计说明文件)2.确认PCB模板是最新的3. 确认模板 ...

  10. 记离线缓存(manifest)一大坑,断定其只适用于静态网站或离线应用

    今天看了离线缓存(manifest)方面的资料,兴冲冲地就想给自己的网站用上.待我把代码都写好部署上服务器,并测试过OK的时候,在SegmentFault刷了一把manifest方面的问答,才发现这个 ...