已合到:https://17bang.ren/Code/699
form表单中JavaScript参与最多的一个功能就像验证,比如:
演示:注册页面的验证
注意:前端没有安全性可言,服务器端必须再次独立验证!
@想一想@:那为什么还需要前端验证呢?
jquery.validate.js(以下简称validate)是最流行的、基于jquery的客户端验证类库/插件(后文详述)。
ASP.NET项目内置,直接引入,注意顺序,validate必须啊jquery.js后面。
演示:一个最简单的验证效果
验证的实现由三个部分组成:
validate提供了两种方法设定rule:
$('form').validate();validate()方法还可以接受一个options参数,其中就可以设定rule:
$('form').validate({ rules: { username: { required: true } } });其中,username是被验证element的name,required是validate内置的method名。上述代码还可以简写为:
rules: { username: "required" }另外,rules中还可以设定多个rule,每个rule中也可以设定多个method,比如:
rules: { username: "required", password: { required: true, minlength: 4 //4被认为是参数param } }
<!--required指明该input必须有值--> <input type="text" name="username" required /> <!--minlength指明该input输入值长度最小为4--> <input type="password" name="password" required minlength="4" />为了契合和Html5规范,validate的一些内置method可以不用带属性值(默认为true),但我们自定义method时,必须声明属性值(会被作为后文method的参数param),否则验证无法生效(除非再采取其他手段,略)
validate()中的option还可以包含:
其中,method是一个回调函数,又可以包含三个参数:
观察由ASP.NET TagHelper / HtmlHelper生成的表单元素:
<input type="text" data-val="true" data-val-required="* 必须填写" id="Register_UserName" name="Register.UserName" value="">
以及他们相应的错误消息元素:
<span class="field-validation-valid" data-valmsg-for="Register.UserName" data-valmsg-replace="true"></span>
为什么会有这些以 data-val 开头的属性呢?
为了集成服务器/客户端验证,微软基于validate开发出jquery.validate.unobtrusive.js插件(以下简称unobtrusive)。
生成的form表单元素中data-开头的属性,都是为unobtrusive准备的。unobtrusive利用:
还可以有验证参数,比如使用[MinLength(4)]之后,会有属性:
data-valmsg-for="inputname"等也是类似的作用。
然后,unobtrusive根据以上属性自动设定rule并进行验证,于是开发人员就不用再:
$("form").validate();
演示:在HTML页面再引入unobtrusive(一样要注意引入顺序,必须在validate之后),不需要任何额外的代码,就能实现验证效果。
而且,因为unobtrusive实际上应用了validate,所以validate中存在的方法,unobtrusive页面一样可以使用,比如:
$('form').valid() //再验证form表单一次
一些特殊的情况下,我们可能还要利用unobtrusive实现自定义的验证。尤其是验证需要不止一个元素的时候,比如:
$.validator.addMethod("creditEnough", function (value, element, param) {
return this.optional(element) || //element的值不为空时才触发验证 parseInt(value) <= parseInt($(param).text());
}, "* 出售的帮帮币大于可出售帮帮币");
添加adapter
$.validator.unobtrusive.adapters.add("enough", ["id"], function (options) { //options.rules["enough"] = options.params.id; options.rules.enough = options.params.id; //options.messages["enough"] = options.message; options.messages.enough = options.message; })
因为缺乏对unobtrusive的全面认识,从逻辑上看有些难以理解,
要生成一个rule:credit=""
options.rules 的效果
禁用某项比如:据实结算即不需要填写帮帮币了
$(form).removeData("validator")
$.validator.unobtrusive.parse();
多快好省!前端后端,线上线下,名师精讲
更多了解 加: