jQuery validator plugin之概要
效果:
Validate forms like you've never validated before!
自定义Validate:
- doesn't jQuery make it easy to write your own validation plugin?
- Sure, but there are still a lot of subtleties to take care of:
- You need a standard library of validation methods (such as emails, URLs, credit card numbers).
- You need to place error messages in the DOM and show and hide them when appropriate.
- You want to react to more than just a submit event, like keyup and blur.
- You may need different ways to specify validation rules according to the server-side enviroment you are using on different projects.
- Sure, but there are still a lot of subtleties to take care of:
集成好的、拿来即用的Validate
- there are a lot of non-jQuery-based solutions (which you'd avoid since you found jQuery) and some jQuery-based solutions
- This particular one is one of the oldest jQuery plugins (started in July 2006) and has proved itself in projects all around the world.
- There is also an article discussing how this plugin fits the bill of the should-be validation solution.
<form class="cmxform" id="commentForm" method="get" action="">
<fieldset>
<legend>Please provide your name, email address (won't be published) and a comment</legend>
<p>
<label for="cname">Name (required, at least 2 characters)</label>
<input id="cname" name="name" minlength="2" type="text" required>
</p>
<p>
<label for="cemail">E-Mail (required)</label>
<input id="cemail" type="email" name="email" required>
</p>
<p>
<label for="curl">URL (optional)</label>
<input id="curl" type="url" name="url">
</p>
<p>
<label for="ccomment">Your comment (required)</label>
<textarea id="ccomment" name="comment" required></textarea>
</p>
<p>
<input class="submit" type="submit" value="Submit">
</p>
</fieldset>
</form>
<script>
$("#commentForm").validate();
</script>A single line of jQuery to select the form and apply the validation plugin, plus a few annotations on each element to specify the validation rules.
- Of course that isn't the only way to specify rules. You also don't have to rely on those default messages, but they come in handy when starting to setup validation for a form.
- 效果
- After trying to submit an invalid form, the first invalid element is focused, allowing the user to correct the field.
- If another invalid field – that wasn't the first one – was focused before submit, that field is focused instead, allowing the user to start at the bottom if he or she prefers.
- Before a field is marked as invalid, the validation is lazy:
- Before submitting the form for the first time, the user can tab through fields without getting annoying messages – they won't get bugged before having the chance to actually enter a correct value
- Once a field is marked invalid, it is eagerly validated:
- As soon as the user has entered the necessary value, the error message is removed
- If the user enters something in a non-marked field, and tabs/clicks away from it (blur the field), it is validated
- obviously the user had the intention to enter something, but failed to enter the correct value
- After trying to submit an invalid form, the first invalid element is focused, allowing the user to correct the field.
- 原理
- That behaviour can be irritating when clicking through demos of the validation plugin
- it is designed for an unobtrusive user experience, annoying the user as little as possible with unnecessary error messages.
- That behaviour can be irritating when clicking through demos of the validation plugin
API
two terms are used very often, so it's important that you know their meaning in the context of the validation plugin:
- method:A validation method implements the logic to validate an element,
- like an email method that checks for the right format of a text input's value.
- A set of standard methods is available, and it is easy to write your own.
List of built-in Validation methods:A set of standard validation methods is provided:
required
– Makes the element required.remote
– Requests a resource to check the element for validity.minlength
– Makes the element require a given minimum length.maxlength
– Makes the element require a given maximum length.rangelength
– Makes the element require a given value range.min
– Makes the element require a given minimum.max
– Makes the element require a given maximum.range
– Makes the element require a given value range.step
– Makes the element require a given step.email
– Makes the element require a valid emailurl
– Makes the element require a valid urldate
– Makes the element require a date.dateISO
– Makes the element require an ISO date.number
– Makes the element require a decimal number.digits
– Makes the element require digits only.- Some more methods are provided as add-ons, and are currently included in additional-methods.js in the download package. Not all of them are documented here:
accept
– Makes a file upload accept only specified mime-types.creditcard
– Makes the element require a credit card number.extension
– Makes the element require a certain file extension.phoneUS
– Validate for valid US phone number.require_from_group
– Ensures a given number of fields in a group are complete.- You can find the source code for all additional methods in the GitHub repository.
- It is possible to re-define the implementation of the built-in rules using the
$.validator.methods
property
- A validation method implements the logic to validate any element.
- Provided are a set of default validation methods, such as required.
- Apart from required itself and equalTo, all validation methods declare an element valid when it has no value at all. That way an email field is optional unless required is specified.
- You can specify an element input to contain a valid email address, or nothing at all. Use jQuery.validator.addMethod to implement custom methods.
- rule: A validation rule associates an element with a validation method
- like "validate input with name "primary-mail" with methods "required" and "email".
- A validation rule applies one or more validation methods to an input element.
- You can specify validation rules via metadata or via plugin settings (option
rules
).- The decision is often influenced by serverside infrastructure.
- If a web framework is used, it is often easier to use metadata, which is also good for fast prototyping.
- Plugin settings produce cleaner markup, though valid markup results from both.
- The decision is often influenced by serverside infrastructure.
- Whenever you have multiple fields with the same rules and messages, refactoring those can reduce a lot of duplication. Using addMethod and addClassRules are most effective for that.
- Let's consider an example where you have ten customer fields, each required and with a minlength of 2. You need custom messages for both rules. To avoid having to specify those rules and messages again and again, we can alias existing methods with different messages and group them into a single class:
// alias required to cRequired with new message
$.validator.addMethod("cRequired", $.validator.methods.required,
"Customer name required");
// alias minlength, too
$.validator.addMethod("cMinlength", $.validator.methods.minlength,
// leverage parameter replacement for minlength, {0} gets replaced with 2
$.validator.format("Customer name must have at least {0} characters"));
// combine them both, including the parameter for minlength
$.validator.addClassRules("customer", { cRequired: true, cMinlength: 2 });- With that in place, we can add a class customer to all customer fields and be done with it:
<input name="customer1" class="customer">
<input name="customer2" class="customer">
<input name="customer3" class="customer">
- Let's consider an example where you have ten customer fields, each required and with a minlength of 2. You need custom messages for both rules. To avoid having to specify those rules and messages again and again, we can alias existing methods with different messages and group them into a single class:
You can also reuse existing methods inside other custom methods, to reuse certain implementations.
- For example, if you're writing a custom method for validating email addresses inside a single field, you could call the existing email method for each email:
jQuery.validator.methods.email.call(this, email, element)
Plugin methods
This library adds three jQuery plugin methods, the main entry point being the validate
method:
validate()
– Validates the selected form.valid()
– Checks whether the selected form or selected elements are valid.rules()
– Read, add and remove rules for an element.
Custom selectors
This library also extends jQuery with three custom selectors:
:blank
– Selects all elements with a blank value.:filled
– Selects all elements with a filled value.:unchecked
– Selects all elements that are unchecked.
Validation event
The goal of these interactions is to provide feedback as early as possible, whilst avoiding user annoyance.
Displaying error messages before the user had the chance to even type something is not helpful.
- By default, forms are validated on submit, triggered by the user clicking the submit button or pressing enter when a form input is focused (option
onsubmit
). - In addition, once a field was highlighted as being invalid, it is validated whenever the user types something in the field (option
onkeyup
). - When the user enters something invalid into a valid field, it is also validated when the field loses focus (option
onfocusout
).
validator
The validate method returns a Validator object that has a few public methods that you can use to trigger validation programmatically or change the contents of the form
The validator object has more methods, but only those documented here are intended for usage.
Validator.form()
– Validates the form.Validator.element()
– Validates a single element.Validator.resetForm()
– Resets the controlled form.Validator.showErrors()
– Show the specified messages.Validator.numberOfInvalids()
– Returns the number of invalid fields.Validator.destroy()
– Destroys this instance of validator.
There are a few static methods on the validator object:
jQuery.validator.addMethod()
– Add a custom validation method.jQuery.validator.format()
– Replaces {n} placeholders with arguments.jQuery.validator.setDefaults()
– Modify default settings for validation.jQuery.validator.addClassRules()
– Add a compound class method.
Error messages
An error message displays a hint for the user about invalid elements, and what is wrong.
There are four ways to provide error messages.
- Via the title attribute of the input element to validate
- via data attributes,
- via error labels
- via plugin settings (option
messages
).
All validation rules included here provide a default error message which you can use for prototyping,because it is used when no specific message is provided.
The priorities are as follows:
- A custom message (passed by plugin options),
- the element's title,
- the default message.
When using data attributes, you can set a generic message for all rules, or specific messages per rule:
<input required data-msg="Please fill this field">
<input data-rule-minlength="2" data-rule-maxlength="4" data-msg-minlength="At least two chars" data-msg-maxlength="At most fours chars">
Error message display
Error messages are handled via label elements with an additional class (option errorClass
).
The link between the message and the invalid element is provided via the labels for attribute.
When provided in the markup, they are shown and hidden accordingly, and otherwise created on demand.
By default, labels are created after the invalid element, this is also customizable (option errorPlacement
).
It is also possible to put them into an error container (option errorLabelContainer
).
To use a different element then a label, specify the errorElement
option.
General messages
In addition to field-specific messages you can display a general "your form is invalid, please fix the highlighted fields!" message in a container anywhere on your page,
eg. above the form (option errorContainer
).
The container is shown and hidden when errors occur and are fixed accordingly.
The container for error labels (option errorLabelContainer
) can also be nested inside the error container.
Focusing of invalid elements
By default, the first invalid element in a form is focused after submitting a form with invalid elements.
To prevent confusion on the behalf of the user, the plugin remembers the element that had focus when the form was submitted, and refocuses that element.
That way the user can try to fill out elements of the form at the end, without being forced to focus them again and again. This can be disabled (option focusInvalid
).
General Guidelines
provides detailed discussion of the design and ideas behind the plugin,
explaining why certain things are as they are.
It covers the features in more detail than the API documentation, which just briefly explains the various methods and options available.
Fields with complex names (brackets, dots)
When you have a name attribute like user[name], make sure to put the name in quotes.
More details in the General Guidelines.
If your form consists of fields using names that aren't legal JavaScript identifiers, you have to quote those names when using the rules
option:
$("#myform").validate({
rules: {
// no quoting necessary
name: "required",
// quoting necessary!
"user[email]": "email",
// dots need quoting, too!
"user.address.street": "required"
}
});
Too much recursion
Another common problem occurs with this code:
$("#myform").validate({
submitHandler: function(form) {
// some other code
// maybe disabling submit button
// then:
$(form).submit();
}
});
This results in a too-much-recursion error:
$(form).submit()
triggers another round of validation, resulting in another call to submitHandler, and voila, recursion.
Replace that with form.submit(), which triggers the native submit event instead and not the validation.
So the correct code looks slightly different:
$("#myform").validate({
submitHandler: function(form) {
form.submit();
}
});
Form submit
By default, the form submission is prevented when the form is invalid, and submitted as normal when it is valid. You can also handle the submission manually (option submitHandler
).
Skipping validation on submit
To skip validation while still using a submit-button, add the attribte "formnovalidate" to that input:
<input type="submit" name="go" value="Submit">
<input type="submit" formnovalidate name="cancel" value="Cancel">
This used to work by adding class="cancel"
to the input, this is now deprecated.
Developing and debugging a form
While developing and debugging the form, you should set the debug
option to true.
That prevents form submission on both valid and invalid forms and outputs some helpful messages to window.console (available via Firebug or Firebug Lite) that help debugging
When you have everything set up and don't get any error messages displayed, check if your rules all accept empty elements as valid (like email or url methods).
Some issues are caused by certain form element's names.
- A name you should avoid is "submit" (for submit buttons and anything else).
- browsers expose form elements as properties of the form element, by their name, in this case hiding native methods like submit().
- Just don't use name="submit" and you're good.
Validating multiple forms on one page
The plugin can handle only one form per call.
In case you have multiple forms on a single page which you want to validate, you have to initialise them all individually:
$( "form" ).each( function() {
$( this ).validate( options );
} );
You can avoid having to duplicate the plugin settings by modifying the defaults, using jQuery.validator.setDefaults to override multiple settings at once.
目标:
The ultimate goal of this plugin is to make working with forms more fun for everyone.
By improving the interaction, it is easier and less annoying for the user to fill out the form and submit it.
To achieve this, it is important that the plugin is actually deployed on websites around the world,
so a lot of focus is spent on making it easy for developers – that's you – to use the plugin.
The plugin can never replace serverside validation and doesn't intend to do so.
Having both in place gives you the necessary security for your application, as well as improved usability.
使用建议
- Mandated: A 'name' attribute is required for all input elements needing validation, and the plugin will not work without this.
- A 'name' attribute must also be unique to the form, as this is how the plugin keeps track of all input elements.
- However, each group of radio or checkbox elements will share the same 'name' since the value of this grouping represents a single piece of the form data.
- Optionally: Each input can have a label associated with it, where the 'for' attribute of the label refers to the 'id' attribute of the input.
- It's also a common practice to have 'id' and 'name' attributes with the same value, although keep in mind that since this plugin does not use the 'id' attribute, this is not mandatory.
<label for="firstname">Firstname</label>
<input id="firstname" name="fname">
jQuery validator plugin之概要的更多相关文章
- jQuery validator plugin 之 custom methods 案例1:multi email
1.add method jQuery.validator.addMethod( "multiemail", function (value, element) { var ema ...
- jQuery validator plugin之Validator
Validator.destroy() Destroys this instance of validator freeing up resources and unregistering event ...
- jQuery validator plugin之Methods
step method Makes the element require a given step. step( value ) value Type: Number Step value requ ...
- jQuery validator plugin之Plugin Method
原文 .validate() validate( [options ] ) options Type: Object debug (default: false) Type: Boolean Enab ...
- jQuery validator plugin之Selector
原文 :unchecked Selector Selects all elements that are unchecked. jQuery( ":unchecked" ) Inv ...
- jQuery.validator 详解二
前言:上一篇详细的介绍了jQuery.validator( 版本v1.13.0 )的验证规则,这一篇重点讲述它的源码结构,及如何来对元素进行验证,错误消息提示的内部实现 一.插件结构(组织方式) 在讲 ...
- jQuery.validator 详解
jQuery.validator 详解二 前言:上一篇详细的介绍了jQuery.validator( 版本v1.13.0 )的验证规则,这一篇重点讲述它的源码结构,及如何来对元素进行验证,错误消息提示 ...
- jQuery Validation Plugin学习
http://blog.csdn.net/violet_day/article/details/14109261 jQuery Validation Plugin Demo 一.默认校验规则 (1)r ...
- (转)jquery.validator规则
登录|注册 收藏成功 确定 收藏失败,请重新收藏 确定 标题 标题不能为空 网址 标签 摘要 公开 取消收藏 分享资讯 传PPT/文档 提问题 写博客 传资源 ...
随机推荐
- 18、MySQL
++主键(primary key) 能够唯一标识表中某一行的属性或属性组++.==一个表只能有一个主键==,但可以有多个候选索引.==主键可以保证记录的唯一==和==主键域非空==,数据库管理系统对于 ...
- MSSQL:查看所有触发器信息的命令
转自:http://www.2cto.com/database/201307/228708.html 编写程序,有时或为了偷懒,或为更简单地实现所需功能,使用了触发器.这可是把双刃剑,用得不好,程序出 ...
- Android开发入门经典【申明:来源于网络】
Android开发入门经典[申明:来源于网络] 地址:http://wenku.baidu.com/view/6e7634050740be1e650e9a7b.html?re=view
- 2016ACM/ICPC亚洲区沈阳站 - A/B/C/E/G/H/I - (Undone)
链接:传送门 A - Thickest Burger - [签到水题] ACM ICPC is launching a thick burger. The thickness (or the heig ...
- HDU_5528_Count a * b
Count a * b Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Tot ...
- 使用jsonp请求本地json文件
使用jsonp解决请求本地文件跨域问题 <!DOCTYPE html> <html lang="en"> <head> <meta cha ...
- Fiddler_内置命令行_03
Fiddler左下角有一个命令框 [基础命令] [举例说明] ? 回车之后,匹配的内容如下图 stop [断点命令] FIddler断点功能就是将请求截获下来,但是不发送,这个时候你可以干很多事情, ...
- SyntaxError:unexpected EOF while parsing(<string,line 0>)
在python+Django中出现报错:(上图) 经断点发现:python内置函数eval在处理空字符串时会返回EOF错误,判断后解决
- 苹果审核被拒,解析奔溃日志.txt转crash文件
1. 桌面新建一个文件夹,用来存放crash相关的东西.取名crash 2.下载苹果官方邮件里给的后缀名为 .txt 的被拒附件(这三个txt格式文件为苹果返回的崩溃日志文件),把这三个文件放在刚新建 ...
- 2、jeecg 笔记之 t:dictSelect 或 t:dgCol 自定义字典
1.需求 先说一下需求场景吧,我们知道 jeecg 中提供了下拉,其中包含两种使用场景: 一种是直接通过 t:dictSelect 使用,再就是 t:dgCol 用于表头的列表工具条标签: 总之就是 ...