<script src=/blog_article/"/js/jquery.js" type="text/javascript"></script>
<script src=/blog_article/"/js/jquery.validate.js" type="text/javascript"></script>
(1)required:true
必输字段
(2)remote:"check.php" 使用ajax方法调用check.php验证输入值
(3)email:true 必须输入正确格式的电子邮件
(4)url:true 必须输入正确格式的网址
(5)date:true 必须输入正确格式的日期 日期校验ie6出错,慎用
(6)dateISO:true 必须输入正确格式的日期(ISO),例如:2009-06-23,1998/01/22 只验证格式,不验证有效性
(7)number:true 必须输入合法的数字(负数,小数)
(8)digits:true
必须输入整数
(9)creditcard: 必须输入合法的信用卡号
(10)equalTo:"#field" 输入值必须和#field相同
(11)accept: 输入拥有合法后缀名的字符串(上传文件的后缀)
(12)maxlength:5 输入长度最多是5的字符串(汉字算一个字符)
(13)minlength:10 输入长度最小是10的字符串(汉字算一个字符)
(14)rangelength:[5,10] 输入长度必须介于
5 和 10 之间的字符串")(汉字算一个字符)
(15)range:[5,10] 输入值必须介于
5 和 10 之间
(16)max:5 输入值不能大于5
(17)min:10 输入值不能小于10
三、默认的提示
messages: {
required: "This field is required.",
remote: "Please fix this field.",
email: "Please enter a valid email address.",
url: "Please enter a valid URL.",
date: "Please enter a valid date.",
dateISO: "Please enter a valid date (ISO).",
dateDE: "Bitte geben Sie ein g眉ltiges Datum ein.",
number: "Please enter a valid number.",
numberDE: "Bitte geben Sie eine Nummer ein.",
digits: "Please enter only digits",
creditcard: "Please enter a valid credit card number.",
equalTo: "Please enter the same value again.",
accept: "Please enter a value with a valid extension.",
maxlength: $.validator.format("Please enter no more than {0} characters."),
minlength: $.validator.format("Please enter at least {0} characters."),
rangelength: $.validator.format("Please enter a value between {0} and {1} characters long."),
range: $.validator.format("Please enter a value between {0} and {1}."),
max: $.validator.format("Please enter a value less than or equal to {0}."),
min: $.validator.format("Please enter a value greater than or equal to {0}.")
},
如需要修改,可在js代码中加入:
jQuery.extend(jQuery.validator.messages, {
required: "必选字段",
remote: "请修正该字段",
email: "请输入正确格式的电子邮件",
url: "请输入合法的网址",
date: "请输入合法的日期",
dateISO: "请输入合法的日期 (ISO).",
number: "请输入合法的数字",
digits: "只能输入整数",
creditcard: "请输入合法的信用卡号",
equalTo: "请再次输入相同的值",
accept: "请输入拥有合法后缀名的字符串",
maxlength: jQuery.validator.format("请输入一个 长度最多是
{0} 的字符串"),
面试的时候遇到有人问这个问题,如果让你去用JS设计类似于JQuery 的$("#id")、$("#id").size()功能的时候,你如何去做? 这里我研究了一下,最终把它写了下来,让有需要的朋友看一下,欢迎大家讨论。
首先一个页面上有这些元素
<div id="iddv" > my name is allen zhang</div>
<div id="dv" >i was from guizhou province</div>
我们的目的是用原生态的JS实现类似于JQuery 的$("#id")、$("#id").size()功能
1. 实现 $("#id") / $("#class") / $("div")
$ = function (str) {
return new JQuery(str);
}
JQuery = function (str) {
if (str.indexOf("#") == 0)
this.dom = document.getElementById(str.substring(1));
else if (str.indexOf(".") == 0)
this.dom = getElementsByClassName(str);
else
this.dom = document.getElementsByTagName(str);
return this.dom;
}
function getElementsByClassName(str) {
var elements = document.getElementsByTagName('*');
if (!elements) {
for (var i = 0; i <= elements.length; i++) {
if (elements[i].className == str.substring(1)) {
return elements[i];
}
}
}
return "undefined";
}
$("#iddv"); //output: <div id="iddv" >
$(".myclass"); //output: <div id="iddv" >
$("div"); //[div#iddv.myclass, div#dv.dvcs]
2. 为了实现 $("#id").size() ,在上面的基础上改了一下,同过继承的方式来实现的,如果你对js的继承方式不大了解,可以在网上搜一下,并于更好的理解以下方式。
$ = window.JQuery = function (str) {
return new JQuery.prototype.init(str);
}
JQuery.prototype = {
name: "JQuery",
version: "1.71",
init: function (str) {
if (str.indexOf("#") == 0) {
this.dom = document.getElementById(str.substring(1));
this.length = 1;
}
else if (str.indexOf(".") == 0) {
this.dom = getElementsByClassName(str.substring(1));
this.length = this.dom.length;
}
else {
this.dom = document.getElementsByTagName(str);
this.length = this.dom.length;
}
},
size: function () {
if (this.dom)
return this.length;
}
}
function getElementsByClassName(str) {
var elements = document.getElementsByTagName('*');
if (!elements) {
for (var i = 0; i <= elements.length; i++) {
if (elements[i].className == str.substring(1)) {
return elements[i];
}
关于JavaScript的版本
目前Js标准有两个支撑,分别为ECMA-262和ECMA-357.357是针对262的一个XML扩展。
关于JavaScript的运行环境
只要有解释器,客户端/服务器端均可。由于浏览器默认装载了解释器,所以通过浏览器学习Js是很方便的。
- 关于JavaScript的类型变换
基本数据类型之间,对象和基本数据类型是可以自动转换的。
基本数据类型->对象的转换,涉及到一个概念--瞬态对象。所谓的瞬态,是指被系统临时创建用后就丢弃的。
如下代码即为瞬态对象的典型例子。
2 console.log(s.length);
console.log(s.length);
至于对象->基本数据类型的转换,则可能涉及到对象的toString,valueOf方法。
- 关于传值和传址
基本数据类型:传值
函数和数组:传址。关于这一点还是和传统Java有区别的,JavaScript中更像是引用的传值。以下的代码较好地解释了这一点。
2 // work, though, because instead of changing the array itself, it tries to
3 // change the reference to the array.
4 function add_to_totals2(totals, x)
5 {
6 newtotals = new Array(3);
7 newtotals[0] = totals[0] + x;
8 newtotals[1] = totals[1] + x;
9 newtotals[2] = totals[2] + x;
10 totals = newtotals; // This line has no effect outside of the function
11 }
字符串:比较特殊,可以认为是传值。这一点和Java不同,值得注意。
- 关于变量的重复声明
对变量没有任何影响。
- 关于未定义的变量
未声明的变量不能直接读,否则会发生错误;但却可以直接赋值,赋值的过程中系统隐式声明它。
- 关于变量的作用域
全局变量就是全局对象的属性,局部变量就是调用对象的属性。调用对象和全局对象共同构成了作用域链(Scope chain)。变量名解析(variable name resolution)就是在这个作用域链中查询变量的过程。按照我的理解,局部变量所在的调用对象实际上和函数相关,它是指函数被调用时创建的。该调用对象的一个属性被初始化成一个名叫 arguments 的属性,它引用了这个函数的 Arguments 对象--函数的实际参数。所有用 var 语句声明的本地变量也被定义在这个调用对象里。这个时候,调用对象处在作用域链的头部,本地变量、函数形式参数和 Arguments 对象全部都在这个函数的范围里了。其实,由于JavaScript是通过词法来划分作用域的,当一个函数在定义的时候,其作用域链就形成了,并成为该函数的内部状态。只不过当调用的时候,所创建的调用对象被添加到定义时创建的作用域链的头部。
- 关于闭包
代码和作用域的综合体叫做闭包。所有的JavaScript函数都是闭包。
只有当一个嵌套函数被到处到它所定义的作用域外时,这种闭包才是有趣的。--摘自犀牛书
- 关于类,构造函数和原型
JavaScript还不支持真正的类,其所为的类为伪类(pseudoclass)。构造函数和原型是伪类理论的重要支撑工具。
一个对象的创建分为两步,第一步为new ,创建一个新对形象;第二步,新对象调用构造函数,并根据构造函数设置属性(方法可以看做函数属性)。比较特殊的是,所有的构造函数均有一个特殊的属性-prototype,该属性在函数被定义时就已经初始化为原型对象了。默认的,改原型对象有一个constructor属性,其值恰好为构造函数。添加给原型对象的任何属性,都会成为构造函数所初始化的对象的属性(通过属性值的查找完成继承)。
- 关于类的继承
(1)子类的构造函数的原型对象=父类的实例
(2)子类的构造函数=子类的构造函数
(3)删除父类构造函数所创建的属性。(不必要,重复的)
示例代码:
2 "http://www.w3.org/TR/html4/loose.dtd">
3 <html>
4 <head>
5 <title></title>
6 <script src="/blog_article/myJs.js" type="text/javascript"></script>
7 </head>
8 <body>
9 <!--
10 <a href="javascript:void f(5);"> Open new window </a>
11 -->
12 <input type="button" onClick="javascript:var f = new outer(1); alert(f.inner1(2));">闭包1</input>
13 <br>
14 <input type="button" onClick="javascript:var f = new outer(2); f.x=1000; alert(f.inner2(3));">闭包2</input>
15 <br>
16 <input type="button" onClick="javascript:myClosure.x=1; alert(myClosure.x); var f = myClosure(1000); alert(f()); alert(f()); alert(f()); alert(f());">作用域与闭包</