6.jquery插件

也称扩展(Extension),是遵循一定规范编写出来的程序.

 

jQuery插件 几千种 可以去http://plugins.jquery.com  去获取

 

一.表单验证插件-----Validation

 

最常使用JavaScript的场合就是表单的验证,而jQuery作为一个优秀的JavaScript库,也提供了一个优秀的表单验证插件---Validation.Validation是历史最悠久的jQuery插件之一,经过了全球范围内不同项目的验证,并得到了许多Web开发者的好评.作为一个标准的验证方法库,Validation拥有如下特点:

1. 内置验证规则: 拥有必填、数字、emailurl和信用卡号码等19类内置验证规则.

2. 自定义验证规则:可以很方便地自定义验证规则.

3. 简单强大的验证信息提示:默认了验证信息提示,并提供自定义覆盖默认提示信息的功能.

4. 实时验证:可以通过keyup或blur事件触发验证,而不仅仅在表单提交的时候验证.

 

 

下载地址: http://bassistance.de/jquery-plugins/jquery-plugin-validation

 

.快速上手(第一个Validation插件程序)

html页面

 

<style type="text/css">

* {

font-family:verdana;

font-size:96%;

}

label {

width:10em;

float:left;

}

/*如果不符合验证规则 则自动在被验证的文本框后面加一个class属性为errorlabel

作为提示信息 因为上面已经设置了label为浮动 所以自动生成的显示提示信息的label

也是浮动的 所以效果有些问题 需要给自动生成的label修改它的floatnone

如果想控制提示信息和文本框的距离 可以设置padding-left* */

 

label.error {

float:none;

color:red;

padding-left:5em;

vertical-align:top;

}

p {

clear:both;

}

em {

font-weight: bold;

padding-right:1em;

vertical-align:top;

}

.submit {

margin-left:12em;

}

</style>

 

body中的代码

 

<form id="commentForm" action="#" method="get">

<fieldset>

<legend>带验证的评论</legend>

<p>

<label for="username">姓名</label><em>*</em>

<input type="text" name="username" id="username" size="25" />

</p>

<p>

<label for="email">电子邮件</label><em>*</em>

<input type="text" name="email" id="email" size="25" />

</p>

<p>

<label for="url">网址</label><em>  </em>

<input type="text" name="url" id="url" size="25">

</p>

<p>

<label for="comment">你的评论</label><em>*</em>

<textarea id="comment" name="comment" cols="22" ></textarea>

</p>

<p>

<input class="submit" type="submit" value="提交"/>

</p>

</fieldset>

</form>

需求:

(1) 对”姓名”的必填和长度至少是两位的验证.

(2) 对”电子邮件”的必填和是否为Email格式的验证.

(3) 对”网址”是否为url的验证.

(4) 对”你的评论”的必填验证

 

当用户单击”提交”按钮后,显示下图的效果(当鼠标失去焦点也会显示)

 

1:引入jQuery库和Validation插件

 

<script src="../../../js/jquery/jquery-1.7.2.js" type="text/javascript" charset="utf-8"></script>

<script src="../../../js/jquery/jquery.validate.js" type="text/javascript" charset="utf-8"></script>

 

2.确定哪个表单需要验证

$(function(){

$("#commentForm").validate();

});

 

3.给表单域设置验证规则

class=”required” 为必须填写   minlength=”2” 为最小长度为2

class=”required email” 为必须填写和内容要符合E-mail格式

class=”url”url格式验证

 

 

 

注意:hbuilder中使用IE运行,IE无效,原因是IE默认是阻止脚本执行.解决方案,找到第一个Validation插件程序.html” 然后右键IE运行,允许阻止内容即可

 

验证原理

:如果验证失败,会在验证的表单域后面动态的创建出一个class属性为errorlabel标签,使用firebug查看,生成的label标签源代码如下:

 

<label id="username-error" class="error" for="username">Please enter at least 2 characters.</label>

 

因为之前设置了label标签的floatleft 左浮动,所以自动生成的这个label标签也会是左浮动的,如果不给生成的这个标签加label.error样式的话就会出错,效果如下:

 

产生该效果的原因为 “姓名”这个label 和 错误提示这个label都是左浮动的,左浮动会脱离文档流,紧贴父容器的边框.

 

为了效果正确,需要给 自动产生的这个label加样式,让它不浮动,代码如下:

 

/*如果不符合验证规则 则自动在被验证的文本框后面加一个class属性为errorlabel

作为提示信息 因为上面已经设置了label为浮动 所以自动生成的显示提示信息的label

也是浮动的 所以效果有些问题 需要给自动生成的label修改它的floatnone

如果想控制提示信息和文本框的距离 可以设置padding-left* */

label.error {

float:none;

color:red;

padding-left:5em;

vertical-align:top;

}

 

padding-left:设置提示信息和文本框的边距,为了同学们看清padding的效果,label加了一个背景,效果如下:

 

 

全部代码如下

参见 第一个validation插件程序.html

 

<!DOCTYPE html>

<html>

 

<head>

<meta charset="UTF-8">

<title>第一个validation插件程序</title>

<style type="text/css">

* {

font-family: verdana;

font-size: 96%;

}

label {

width: 10em;

float: left;

}

/*如果不符合验证规则 则自动在被验证的文本框后面加一个class属性为errorlabel

作为提示信息 因为上面已经设置了label为浮动 所以自动生成的显示提示信息的label

也是浮动的 所以效果有些问题 需要给自动生成的label修改它的floatnone

如果想控制提示信息和文本框的距离 可以设置padding-left* */

label.error {

float: none;

color: red;

padding-left: 5em;

vertical-align: top;

background-color: burlywood;

}

p {

clear: both;

}

em {

font-weight: bold;

padding-right: 1em;

vertical-align: top;

}

.submit {

margin-left: 12em;

}

</style>

<!--第一步 导入jQuery库和validation插件-->

<script src="../../../js/jquery/jquery-1.7.2.js" type="text/javascript" charset="utf-8"></script>

<script src="../../../js/jquery/jquery.validate.js" type="text/javascript" charset="utf-8"></script>

<script type="text/javascript">

/*第二步 确定哪个表单需要被验证*/

$(function() {

$("#commentForm").validate();

});

</script>

 

</head>

 

<body>

<form id="commentForm" action="#" method="get">

<fieldset>

<legend>带验证的评论</legend>

<p>

<label for="username">姓名</label><em>*</em>

<input type="text" name="username" id="username" size="25" class="required" minlength="2" />

</p>

 

<p>

<label for="email">电子邮件</label><em>*</em>

<input type="text" name="email" id="email" size="25" class="required email" />

</p>

 

<p>

<label for="url">网址</label><em>  </em>

<input type="text" name="url" id="url" size="25" class="url" />

</p>

 

<p>

<label for="comment">你的评论</label><em>*</em>

<textarea id="comment" name="comment" cols="22" class="required"></textarea>

</p>

 

<p>

 

<input class="submit" type="submit" value="提交" />

</p>

</fieldset>

</form>

</body>

 

</html>

 

三.两种不同的验证写法

()class=”required”  minlength=”2” 都写到class

上面的例子 需要把class设置成required 才能完成 必填验证,需要把minlength设置为2才能完成最小长度为2的验证.虽然这样写能实现功能,但一会把验证信息写到class,一会又写到minlength中实在很麻烦.Validation充分考虑到了这一点,用户可以将所有的与验证相关的信息都写到class 属性中方便管理.为了实现这个功能,需要经过以下几个步骤.

 

1.引入一个新的jQuery插件:  jquery.metadata.js

 

<script src="../../../js/jquery/jquery.metadata.js" type="text/javascript" charset="utf-8"></script>

 

2.改变调用的验证方法

 

$("#commentForm").validate();

改为

$("#commentForm").validate({meta: "validate"});

3.将验证规则全部编写到class属性中

演示代码:

<form id="commentForm" action="#" method="get">

<fieldset>

<legend>带验证的评论</legend>

<p>

<label for="username">姓名</label><em>*</em>

<input type="text" name="username" id="username" size="25"  class="{validate:{required:true, minlength:2}}"   />

</p>

 

<p>

<label for="email">电子邮件</label><em>*</em>

<input type="text" name="email" id="email" size="25" class="{validate:{required:true, email:true}}" />

</p>

 

<p>

<label for="url">网址</label><em>  </em>

<input type="text" name="url" id="url" size="25" class="{validate:{url:true}}" />

</p>

 

<p>

<label for="comment">你的评论</label><em>*</em>

<textarea id="comment" name="comment" cols="22" class="{validate:{required:true}}"></textarea>

</p>

 

<p>

 

<input class="submit" type="submit" value="提交" />

</p>

</fieldset>

</form>

 

 

本段代码的验证效果与之前的例子完全一致.

 

注意: jquery.validate.js jquery.metadata.js版本要配套,之前笔者下载的最新版本的validate和现有的jquery.metadata.js不配套,所以不出效果.

 

 

(二)将验证规则和HTML结构分离

 

上面的两个例子都是通过修改HTML的属性来实现的,这样写虽然能实现功能,但内容和验证行为没有分离,下面介绍一种分离的方法,js中通过name属性来关联表单域和验证规则.

 

首先,将表单域中的class属性移除.

然后加入如下jQuery代码:

 

$(function() {

$("#commentForm").validate({

rules:{

username:{

required:true,

minlength:2

},

email:{

required:true,

email:true

},

url:"url",

comment:"required"

}

});

});

 

 

具体代码步骤:

1. 表单对象.validate()方法中增加rules属性

2.通过每个字段的name属性值来匹配验证规则

 

3.定义验证规则

 如果一个表单域上只有一个验证规则,则直接写这一个验证规则,例如url:"url"

 如果一个表单域上有多个验证规则,那么验证规则也是一个json对象

 

四.验证信息

1.国际化

Validation插件的验证信息默认语言为英文,如果要改成中文,只需要引入Validation提供的中文验证信息库jquery.validate.messages_cn.js即可,引入代码如下:

 

<script src="../../../js/jquery/jquery.validate.messages_cn.js" type="text/javascript" charset="utf-8"></script>

 

引入语言库后,提示信息自动变成中文,效果如下:

 

2.自定义提示信息

 

 

在不同的验证写法----第一种代码的基础上修改代码,修改后的结果如下

 

<form id="commentForm" action="#" method="get">

<fieldset>

<legend>带验证的评论</legend>

<p>

<label for="username">姓名</label><em>*</em>

<input type="text" name="username" id="username" size="25"  

class="{validate:{required:true, minlength:2,messages:{required:'请输入姓名',minlength:'请至少输入两个字符'}}}"   />

</p>

 

<p>

<label for="email">电子邮件</label><em>*</em>

<input type="text" name="email" id="email" size="25"

class="{validate:{required:true, email:true,messages:{required:'请输入电子邮件',email:'请检查电子邮件的格式'}}}" />

</p>

 

<p>

<label for="url">网址</label><em>  </em>

<input type="text" name="url" id="url" size="25" class="{validate:{url:true,messages:{url:'请检查网址的格式'}}}" />

</p>

 

<p>

<label for="comment">你的评论</label><em>*</em>

<textarea id="comment" name="comment" cols="22" class="{validate:{required:true,messages:{required:'请输入您的评论'}}}"></textarea>

</p>

 

<p>

 

<input class="submit" type="submit" value="提交" />

</p>

</fieldset>

</form>

 

3.自定义提示信息并美化

为提示信息美化(加图片),这对于Validation插件来说,也是非常简单的.

 

 

 jQuery代码:

 

$(function() {

$("#commentForm").validate({

rules: {

username: {

required: true,

minlength: 2

},

email: {

required: true,

email: true

},

url: "url",

comment: "required"

},

messages: {

username: {

required: '请输入姓名',

minlength: '请至少输入两个字符'

},

email: {

required: '请输入电子邮件',

email: '请检查电子邮件的格式'

},

url: '请检查网址的格式',

comment: '请输入您的评论'

},

 

errorElement: "label", //可以用其他标签,记住把样式也对应修改

success: function(label) {

//label指向上面那个错误提示信息标签em

label.text(" ") //清空错误提示消息

.addClass("success"); //加上自定义的success

}

});

});

 

 

样式代码:

 

label.error {

float: none;

color: red;

/*padding-left: 5em;*/

vertical-align: top;

background-color: yellowgreen;

background: url("../../../img/unchecked.gif") no-repeat 2px 0px;

padding-left: 18px;

}

label.success {

background: url("../../../img/checked.gif") no-repeat 2px 0px;

padding-left: 18px;

}

 

全部代码:自定义提示信息并美化.html”

 

4.自定义验证规则

 

需求: 验证码的验证,验证用户输入的验证码是否正确

 

 

<p>

<label for="valCode">验证码</label><em>*</em>

<input type="text" name="valCode" id="valCode" size="25" />=7+9

</p>

 

(1)自定义一个验证规则

 

 

jQuery代码:

 

$(function(){

//在一开始的地方 自定义一个验证方法

$.validator.addMethod(

"formula", //验证方法名称

function(value, element, param) {//验证规则

return value == eval(param);

},

'请正确输入数学公式计算后的结果'//验证提示信息

);

});

(2)调用该验证规则

$("#commentForm").validate({

rules: {

username: {

required: true,

minlength: 2

},

email: {

required: true,

email: true

},

url: "url",

comment: "required",

valCode: {

formula: "7+9"

}

}

});

 

全部代码参见自定义验证规则.html”

 

管理Cookie的插件----Cookie

 

Cookie是网站设计者放置在客户端的小文本文件. 实现 存储用户曾经浏览过的产品列表,记住用户喜欢浏览哪类新闻等.在用户允许的情况下,还可以存储用户的登录信息,使得用户在访问网站时不必每次都键入这些信息.

 

快速上手

 

<!DOCTYPE html>

<html>

    <head>

        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

        <title>jQuery Cookie Plugin</title>

        <script src="../../../js/jquery-3.1.0.js" type="text/javascript" charset="utf-8"></script>

        <script src="../../../js/jquery/jquery.cookie.js" type="text/javascript"></script>

        <script type="text/javascript">

            $(function() {

                var COOKIE_NAME = 'username';

                alert($.cookie(COOKIE_NAME));

if( $.cookie(COOKIE_NAME) ){

$("#username").val($.cookie(COOKIE_NAME) );

}

$("#check").click(function(){

    if(this.checked){

    $.cookie(COOKIE_NAME, $("#username").val() , { path: '/', expires: 10 });

}else{

    $.cookie(COOKIE_NAME, null, { path: '/' });

}

});

            });

        </script>

    </head>

    <body>

       用户名:<input type="text" name="username" id="username"/> <br/>

       <input type="checkbox" name="check" id="check"/>记住用户名

    </body>

</html>

 

1.初始化页面

 

2.关闭浏览器之前

 

3.重新打开浏览器

 

API

写入Cookie

$.cookie(‘cookie’, ’cookie’);

 

读取Cookie

$.cookie(‘cookie’);

 

删除Cookie

$.cookie(‘cookie’,null);

 

说明: 设置为null即删除此cookie,必须使用与之前设置时相同的路径(path)和域名(domain),才可以正确的删除cookie

 

其他可选参数

$.cookie(‘cookie’,’cookie’,{

expires:7,

path:’/’,

domain:’Jquery.com’,

secure:true

})

 

说明: expires:(Number|Date) 有效期.可以设置一个整数作为有效期(单位:),也可以直接设置一个日期对象作为Cookie的过期日期.如果指定日期为负数,例如已经过去的日子,那么此cookie将被删除;如果不设置或者设置为null,那么此cookie将被当做Session Cookie处理,并且在浏览器关闭后删除.

 

Path:(String) cookie的路径属性。默认是创建该Cookie的页面路径.

Domain:(String)cookie的域名属性。默认是创建该Cookie的页面域名.

Secure:(Boolean)如果设为true,那么此cookie的传输会要求一个安全协议,例如HTTPS.

 

 

自定义插件

Why

编写插件的目的是给已经有的一系列方法或函数做一个封装,以便在其他地方重复使用,方便后期维护和提高开发效率.

 

 

插件的种类

1.封装对象方法的插件

 

调用在jQuery对象上的    div对象.方法名();

 

95%以上的jQuery插件都是封装对象方法的插件

 

2.封装全局函数的插件

jQuery.noConflict()  

 

3.选择器插件

color(red) 来选择所有红色字的元素

 

自定义Color()颜色插件

 

;(function($) {

//这里写插件代码

})(jQuery);

 

 

jquery.color.js

 

;(function($) {

 

//. 直接调用在  div对象.color();

 

$.fn.extend({

 

"color": function(value) {

 

if(value == undefined) {

 

return this.css("color");

} else {

 

return this.css("color", value);

}

 

}

});

})(jQuery);

 

如何使用:

1.引入jquery.color.js

<script src="../../../js/jquery/jquery.color.js" type="text/javascript" charset="utf-8"></script>

 

2.使用即可

 

$(function(){

$("#btn1").click(function(){

$("#div1").color("blue");

});

});

 

body中的代码

<div id="div1" class="divClass1">

我是div111222

</div>

 

学生练习:自定义表格隔行换色插件jquery.myTable.js

演示代码:

 

;(function($) {

$.fn.extend({

"隔行换色":function(options){

//设置默认值

options=$.extend({

odd:"odd", /* 偶数行样式*/

even:"even", /* 奇数行样式*/

selected:"selected" /* 选中行样式*/

},options);

//$("选择器",上下文); //如果不传第二个参数 默认上下文是 document 从当前文档中 寻找

//this 在当前对象下 寻找  table

$("tbody>tr:odd",this).addClass(options.odd);

$("tbody>tr:even",this).addClass(options.even);

$('tbody>tr',this).click(function() {

//判断当前是否选中

var hasSelected=$(this).hasClass(options.selected);

//如果选中,则移出selected类,否则就加上selected

$(this)[hasSelected?"removeClass":"addClass"](options.selected)

//查找内部的checkbox,设置对应的属性。

.find(':checkbox').prop('checked',!hasSelected);//2.1.4 需改成prop方法

});

// 如果单选框默认情况下是选择的,则高色.

$('tbody>tr:has(:checked)',this).addClass(options.selected);

return this;  //返回this,使方法可链。

}

});

})(jQuery);

测试代码:

 

<!DOCTYPE html>

<html>

 

<head>

<meta charset="UTF-8">

<title></title>

<link rel="stylesheet" type="text/css" href="../../../css/myTableStyle.css" />

<script src="../../../js/jquery-3.1.0.js" type="text/javascript" charset="utf-8"></script>

<script src="../../../js/jquery/jquery.myTable.js" type="text/javascript" charset="utf-8"></script>

<script type="text/javascript">

$(function(){

$("table").alterBgColor()

.find("th").css("color","red");//可以链式操作

});

</script>

</head>

 

<body>

<table id="table1">

<thead>

<tr>

<th> </th>

<th>姓名1</th>

<th>性别</th>

<th>暂住地</th>

</tr>

</thead>

<tbody>

<tr>

<td><input type="checkbox" name="choice" value="" /></td>

<td>张山</td>

<td></td>

<td>浙江宁波</td>

</tr>

<tr>

<td><input type="checkbox" name="choice" value="" /></td>

<td>李四</td>

<td></td>

<td>浙江杭州</td>

</tr>

<tr>

<td><input type="checkbox" name="choice" value="" checked='checked' /></td>

<td>王五</td>

<td></td>

<td>湖南长沙</td>

</tr>

<tr>

<td><input type="checkbox" name="choice" value="" /></td>

<td>找六</td>

<td></td>

<td>浙江温州</td>

</tr>

<tr>

<td><input type="checkbox" name="choice" value="" /></td>

<td>Rain</td>

<td></td>

<td>浙江杭州</td>

</tr>

<tr>

<td><input type="checkbox" name="choice" value="" /></td>

<td>MAXMAN</td>

<td></td>

<td>浙江杭州</td>

</tr>

</tbody>

</table>

</body>

 

</html>

 

Style.css

 

table { border:0;border-collapse:collapse;}

td { font:normal 12px/17px Arial;padding:2px;width:100px;}

th { font:bold 12px/17px Arial;text-align:left;padding:4px;border-bottom:1px solid #333;}

.even { background:#FFF38F;}  /* 偶数行样式*/

.odd { background:#FFFFEE;}  /* 奇数行样式*/

.selected { background:#FF6500;color:#fff;}

 

 

作业: 实现元素居中的插件

;

(function($) {

 

$.fn.extend({

 

"居中": function() {

 

return this.css("margin","0px auto");

}

});

})(jQuery);

附录: $.extend()方法

 

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title></title>

<script src="../../../js/jquery/jquery-3.1.0.js" type="text/javascript" charset="utf-8"></script>

<script type="text/javascript">

var obj = {

odd: "odd",

even: "even",

};

$.extend(obj,{

odd: "111",

selected: "selected"

});

console.info(obj);

</script>

</head>

<body>

</body>

</html>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值