关于作者

最新作品 JValidator 漂亮的通用表单验证程序

上一篇 / 下一篇  2007-04-25 18:32:31

查看( 2777 ) / 评论( 41 )

CODE:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
LAaV&eCZFb4f0<html xmlns="http://www.w3.org/1999/xhtml">无忧脚本r\d:Rg{5q%oAgq
<head>
\-k9k[;m7K9` V~*~0<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
k T`G} V,i0<title>JValidator 通用表单验证类</title>
H4^An mR.l1vZ5M0<style type="text/css">无忧脚本2Vn.wlOO
body{
#qU;u W4|/t*Z0        font-size:12px;无忧脚本(B/v Xa4s ^:s!h{
}
z7vy}9\I8jhb5I0label{无忧脚本1@/~gN#[ M+G
        float:left;
'nO3H I n0        width:180px;无忧脚本 j-dWDH9J4iS\nQ
}无忧脚本/i5ea]Wp+PE
input {无忧脚本E J6G4]7l8j9fc)ncA
        border:1px solid #D4D4D4;
u\.e(I|0        font-size:12px;无忧脚本[!i~}A']
        width:180px;无忧脚本3p*RK#I$eVZT
}
aU#J5~H9aW9W0
2n'lz6v}1S Ji0fieldset{
)l\I g9YY3J~R0        margin:5px;
2F&{ UJ!\$m yWp0        padding:0 12px 12px 12px;无忧脚本l5U b*B ilz
        border:1px solid #D4D4D4;
bY e}.}q0        background-color:#F9F9F9;
6g,O;`3SJ'z"E [ kB0}
az(n ~2J0无忧脚本Ms q5|1AJ
fieldset legend {无忧脚本~(nPH2[.Rm
        font-weight:bold;无忧脚本D%L%vF/bl"@
}无忧脚本9l;pmgf
button {无忧脚本4tM/k [ i NHC!S
        margin:0 5px;
Mi]1Fn7{#Q0        height:20px;
.y3M$r J|Vm0        padding-left:5px;无忧脚本DI4EN|]c6z4I
        padding-right:5px;
+i&ZFuV8jp0        line-height:20px;无忧脚本P%r,{\eY8V,z
        font-size:12px;
q.xby:iw1}0        border:1px solid #D4D4D4;无忧脚本7|HN X7G I ]
        background-color:#F9F9F9;
5u-O1e9B(@|#s0}
%v\_z^q/\b[w0</style>
g?h1}-A+Do6F4R0<scrīpt type="text/javascrīpt">
"O@_ D)iJ"gS0//基础函数
+~4q'g| R0var isIE = /msie/i.test(navigator.userAgent);
P t#Iws}.S*q0String.prototype.trim=function(){无忧脚本b;N"C8i)F _
        return this.replace(/(^\s*)|(\s*$)/g,"");
T&`7Z!WVOmJ k;d0}
3S/\+]K]_H6p\$aj0if(!isIE){无忧脚本!Rhx.H5~d&b
        Event.prototype.__defineGetter__("srcElement",function(){
:fW.gg!J7JHO0                var node=this.target;
udR V1\ h3I0                while(node.nodeType!=1)node=node.parentNode;
1^;n a!qw1W:GS0                return node;无忧脚本2pHM7yd[ L]n:g
        });无忧脚本S$CIp$h Sn
        HTMLElement.prototype.attachEvent=function(sType,foo){无忧脚本F"hN~GLa
                this.addEventListener(sType.slice(2),foo,false);无忧脚本QWjy;n h2Y
        }
AO^hN0        HTMLElement.prototype.__defineGetter__("innerText",function(){
k[mmTyv0                return this.textContent;
4Ip \@u;S-B HPT(u@0        });无忧脚本#f+Zx8J"l X[
        HTMLElement.prototype.__defineSetter__("innerText",function(str){
)O?,L(G)s#@iuw0                this.textContent = str;无忧脚本 LT!d5v+Q K
        });无忧脚本hP9Kz^"|X
        HTMLElement.prototype.insertAdjacentElement=function(where,parsedNode){
5DRP-Md X(fB#S&Ea0                switch(where){无忧脚本2R gi0PAB5V/]
                        case "beforeBegin":
,q+Fu8D!l1R?Y0                this.parentNode.insertBefore(parsedNode,this);无忧脚本i'jg Z8N"X5J#Wa N
                break;无忧脚本O2P+Pd1L{`i:TV
            case "afterBegin":
c$oj4[vO0                this.insertBefore(parsedNode,this.firstChild);无忧脚本;W-}&^"I.E Z+L8ng
                break;无忧脚本2i5i-O J j _8C+u+UC
            case "beforeEnd":无忧脚本nK(csO-Q|
                this.appendChild(parsedNode);无忧脚本EQ/QT^l%R-p
                break;无忧脚本0Qb ] Uc1P9AN H
            case "afterEnd":无忧脚本j"[+NK+y
                if(this.nextSibling)
5?-\%A6U;ZP@0                    this.parentNode.insertBefore(parsedNode,this.nextSibling);无忧脚本AL?J,L+f;P
                else
4o N'Ul6V K2X0                    this.parentNode.appendChild(parsedNode);
S+f4ZB\5Xe*XI&U0                break;
_JxoX:V IM*] Tox0                }
^0`5dv'r:c0        }无忧脚本fN*g,U!J^ h;Q
    HTMLElement.prototype.insertAdjacentHTML=function(where,htmlStr){无忧脚本;T vU9i;]BY
        var r=this.ownerDocument.createRange();无忧脚本3C|;u[!j6O{B7z
        r.setStartBefore(this);无忧脚本4op0`C_
        var parsedHTML=r.createContextualFragment(htmlStr);无忧脚本?)`8O[6?H8W8A
        this.insertAdjacentElement(where,parsedHTML);
xK zW_D ]j0        }无忧脚本%g*UfEkH:s
无忧脚本qEiM9nN
}
i7^4O X9@ph`s0else document.execCommand("BackgroundImageCache",false,true);
ux"Rx*^$]%KH0function $(id){return (typeof id == "string" ? document.getElementById(id) : id);}无忧脚本B"@7xY Qs/]w
function $N(name){return document.getElementsByName(name);}无忧脚本SUH7bl7f9e]
function $TN(name,root){return root ? $(root).getElementsByTagName(name) : document.getElementsByTagName(name);}
*eyih"],PVw X0function $F(id){return exist(id) ? $(id).value.trim() : null;}
S#TF.Z-n&C"x%`(b0function $IH(id,s){$(id).innerHTML = s;}
C:G9HDl1bz0function $IT(id,s){$(id).innerText = s;}无忧脚本A4L8Tt'D7K%q'KP b
function $iF(id,s){$(id).value = s;}
I9u-B8D kcy!B0function $DC(name){return document.createElement(name);}
P0rEI!}(Q%N&@a0function isEmpty(str){return str.replace(/(?:null)|(?:undefined)/i,"").length == 0;}
g6wZmvS${0function exist(id){return $(id)!= null;}无忧脚本4m ^R[ A8K
function hide(id){if(exist(id))$(id).style.display="none";}
)S%yI:n U-g"U'M0function show(id){if(exist(id))$(id).style.display="";}无忧脚本2k!qFj+M6oF@.[*T
function nextSibling(id){return (($(id).nextSibling.nodeName == "#text" && $(id).nextSibling.Value == "") ? $(id).nextSibling.nextSibling : $(id).nextSibling);}无忧脚本x Y8g~Ux_.Y|
function removeNode(id){无忧脚本&f&I?0V&VG c&WU:q
        if(exist(id)){无忧脚本#jmn b"{+w
                $(id).parentNode.removeChild($(id));
%H1wk/J L5\`0        }
_%yGbq:~oN0}无忧脚本LlZ.m^#UL5d*u
</scrīpt>
tB)XQ_1| Xu0<scrīpt type="text/javascrīpt">无忧脚本nE&Y*\~&b'P:B8E+h
/******************************\
;OX#c%r9vZX0*@author brull
8Cljr | Lpg!j&?0*@email [email]brull@163.com[/email]无忧脚本WYZ@-j0m
*@date 2007-4-24
'^5J,d7b$go4AS1A:d2U0\******************************/
#\6@-A jXu-S:}?0无忧脚本.m$m"P2O+_Q ZHwe S9q
/*无忧脚本o t_7K*lj"tt5sKjQh
*表单通用验证类,需要在表单元素属性里添加两个属性
1Q;q \H)^)@*yf0*pattern 为检验该元素内容是否合法的正则表达式 [必须]无忧脚本6{ ?~h%oa/s?a
*msg 出错是告诉用户的信息 [可选]无忧脚本 G-e4J"S N8T^:G
*required 该元素内容是否必须填写 [可选]
s$SZF#G'M(w EB0*/无忧脚本5Z/_#{[(T6B5H
无忧脚本9x&N4P6QFg
/**无忧脚本3T.Oar%|)Ah"aw
*@param form 表单 id [可选]
%p aH)T,T X0*/无忧脚本-DIqrQ7K lVB ]f
JValidator = function (form) {
DZG7W1V4rD0        var form = $(form);
~7n;QIY0        var elements = form.elements;无忧脚本1OV)T#rm*D
        checkOne = function (obj){//验证单个表单元素
\Z%Cw,}-])x@)B(Gh0                var pass = true;无忧脚本6C@"Ql!G\y
                var tip = $DC("span");无忧脚本,T W dS}1P8G`
                var same = obj.getAttribute("same");无忧脚本*{/fsP G
                var pattern = obj.getAttribute("pattern");无忧脚本t1aT]&zF
                var msg = obj.getAttribute("msg") != null ? obj.getAttribute("msg") : " ";//默认为一空格无忧脚本+l$TOCVi
                var required = obj.getAttribute("required") != "no";//默认为yes无忧脚本0eQ%QOj5j
                var span = nextSibling(obj);
L4a(N$a @v0                var checked = span != null ? span.nodeName == "SPAN" : false;无忧脚本Sf8H(D3a#S}
                if(same != null)same = $F(same);无忧脚本*['\Lc-w+jisq
                obj.value = $F(obj);
S h4Gx6Zs0                tip.style.padding = "1px 1px 1px 20px";
` yN3i;H(J7um`T~0                if(checked) removeNode(span);
$P"kPz7gI L0                if(same != null){
)HO ^:]Ub%nI GH0                        if(same != obj.value){无忧脚本+P'C.C s p.w
                                with (tip.style){
C ?.{Gk Z V4MjK.h0                                        border = "1px dashed #D4D4D4";
E8LD+k1W;e0                                        background = "#FFFF99 url([img]http://www.51js.com/attachments/2007/04/35270_200704250744301.gif[/img]) no-repeat 1px -104px";
Kr }5a }0@.w&B \+] ptT0                                }
4B4p U^)IV;?0                                pass = false;无忧脚本(WS3V%i*y[Ri
                        }无忧脚本z0pe+PG QON/C
                        else {无忧脚本'SZtoW;y
                                tip.style.background = "url(http://www.51js.com/attachments/2007/04/35270_200704250744301.gif) no-repeat 1px -8px";无忧脚本9b`/X2Y4}+j_q)}Ig
                                msg = " ";
6c/`I(a2Iy!]4Ws0                        }无忧脚本|)gn X-n)a'~Qs
                        $IT(tip,msg);
n Kiwu7bR&F0                        obj.insertAdjacentElement("afterEnd",tip);
z%t-tr,J0                }
$B/rmV M0                if(pattern != null){无忧脚本g0W ~[ QA
                        pattern = new RegExp(pattern);
LC oeB5`q`zH0                        if(required || obj.value.length > 0){
V o BD6\[0                                if(!pattern.test(obj.value)){
d!u] mR0                                        with (tip.style){
4x(Y%HoVK5aa X0                                                border = "1px dashed #D4D4D4";
`7b\VAl+i!Y X S+^0                                                background = "#FFFF99 url(http://www.51js.com/attachments/2007/04/35270_200704250744301.gif) no-repeat 1px -104px";无忧脚本/Y$O%H'o1BZAp&J
                                        }无忧脚本 D+[2m!k6H0m6xX
                                        pass = false;无忧脚本5CC ~8V.S%b,j7l
                                }无忧脚本6m5m v0Qg&n;^'E
                                else {
$`T.P Y p^(\0                                        tip.style.background = "url(http://www.51js.com/attachments/2007/04/35270_200704250744301.gif) no-repeat 1px -8px";无忧脚本!Ovp5]vG
                                        msg = " ";
6VH4Wz V K th']0                                }无忧脚本C)m? K*\ U9G
                                $IT(tip,msg);
/H p ZIq.U-? O)x0                                obj.insertAdjacentElement("afterEnd",tip);
(X.m#Cj|s&a.l"QUM3x0                        }
1?c9FU/|E8f5nF+~0                        return pass;
K3E0fS'y|-mH#p0                }无忧脚本%d&j9Dr)K
        }
NRH!ykeH0        this.checkScope = function(id){//验证某个元素范围内的表单
8_1h&Y7?v%F0                if(!$(id)) return true;无忧脚本$d W7`&B7K6n#S2P
                var pass = true;无忧脚本kS%m'y n ~Nw`
                var elements = new Array();无忧脚本ma~ GwQ
                elements[0] = $TN("input",$(id));无忧脚本%l g%I0F.Wh9C1iUS+i
                elements[1] = $TN("select",$(id));
Y(\^dM3VP%b0                elements[2] = $TN("textarea",$(id));无忧脚本U8{,B-{4y(W K-Bh+u(A
                for(var i = 0; i < elements.length; i++){无忧脚本eh/k~Vt3X9VD/H
                        for(var j = 0; j< elements[i].length; j++) {
qD&OXH~Q0                                if(!checkOne(elements[i][j]) && pass) pass = false;无忧脚本hGk#LT4~I
                        }
H.L3[i \l0                }
Q)iS4M\0FD+_)S0                return pass;无忧脚本*z:M4A)N%~A9h,ci
        }无忧脚本PGe+b vD*P|9c
        this.check = function(){//验证整个表单无忧脚本*jmD0x ^;U `2Dwl
                var pass = true;
5H WOyi3f0                for(var i = 0; i < elements.length; i++){无忧脚本5T'j|i0}Y;],M
                        if(elements[i].nodeName != "BUTTON" && elements[i].nodeName != "FIELDSET" && !checkOne(elements[i]) && pass) pass = false;
)nGDCL[.t0C|*u'V0                }无忧脚本1NBYI2b
                return pass;
g@0q"Z^0        }
^*H@VZ%d0        //邦定事件
k k*@RkG$Z@0        for(var i = 0; i < elements.length; i++){无忧脚本7L.F4V:gA#B
                if(elements[i].getAttribute("pattern") != null || elements[i].getAttribute("same") != null){无忧脚本^Ma5On
                        elements[i].attachEvent("onchange",function(event){checkOne(event.srcElement);});
We O9j2e1L0                }无忧脚本Pgk:h{l
        }
Y;G0S.k.T&E0}
FO4}"MB.KD0</scrīpt>无忧脚本9\!E(g De([\rc
<scrīpt type="text/javascrīpt">无忧脚本 H7g%e[Ro M2L"l
/**********应用例子**********/无忧脚本TJw,m H`{9HX
window.onload = function (){无忧脚本1|HQ*{gF Gf ?
        v = new JValidator("form1");无忧脚本/D#m:PN:]
        $("form1").onsubmit = function(){return v.check();}无忧脚本v bn*h.D,a
}
M~"c6S5H)kx0</scrīpt>无忧脚本/p%p}1IGZ
</head>无忧脚本W0u0s}wB)BB

yt'AG Ch"O;K0RAv0<body>
8R8RU|#[8II0<fieldset>
ScEg+D"f9O,G0<legend>使用说明</legend>无忧脚本6[eIJRZg-Yn
<p>
~.D"dPH0<strong>元素定义:</strong><br />
LCFY(gl c/r/D01、在需要验证的元素里定义好下面几个属性:<br />无忧脚本*l_R&it
(1)、pattern:验证该元素的正则表达式,没有“/”分隔符,如果定义了same属性的话,就不再需要定义它<br />
y?&w)XQ8\Z cE0(2)、msg 可选的属性,在验证不通过时显示的信息<br />
,{~;K2V n*Ww0(3)、required 可选的属性,属性值 yes|no,yes,[默认] 该元素必填,no,该元素非必填,但如果填写内容后,将按pattern的定义来验证填写的内容<br />无忧脚本{#I,GL%d6Z0Ia
(4)、same 该元素和那个元素的内容必须相同,属性值为另一元素之id值,如果定义了它,验证将拿元素的id为定义的属性值的元素的值来和该元素值比较无忧脚本$m;e i-i sOmQ
</p>
G3d2eqp5O3B0<p>
7q7tml$o7GX0<strong>程序使用:</strong><br />
7G1p/I^q"T(v{CR0window.onload = function (){<br />
6x2d0W f+I0        v = new JValidator("form1");<br />
!g6duy"t&]+P0        $("form1").onsubmit = function(){return v.check();}<br />无忧脚本!b5L&v8@c3ZM
}<br />无忧脚本rUN C7y
<span style="color:#FF0000">使用时请将程序里面的图片地址[img]http://www.51js.com/attachments/2007/04/35270_200704250744301.gif[/img]改为你所需 </span><br />
G0D%kU]0同时里面还定义了一个方法checkScope,就是只验证给定范围里的表单元素,这个在表单分多步完成时很有用,这里就不写例子了,又兴趣的可以自己研究
5@F ?){&]|0</p>无忧脚本U |6l$K-w.T
</fieldset>
BE7?}Q8N&O+@0<form id="form1" name="form1" method="post" action="">无忧脚本0h7f5D$o,Ul Ng
        <fieldset>无忧脚本FD*e2r6e[]:p
        <legend>测试表单</legend>
O U5H|K0<p>无忧脚本 kn _x2Q ~Fn#`
                                                                <label>昵称:</label>无忧脚本\r'_T kj&X,?3J
                                                                <input type="text" name="nickname" pattern="^[\w\u4e00-\u9fa5\-]{1,20}$" msg="昵称不符合规则" />
H5@7u5L:e01~20个中文、字母、下划线或者减号
/\9\IZ[6U&O ~0                </p>
|@e:N-{u(}0                                                        <p>
m7DmB!q1bL%X0                                                                <label>密码:</label>
fD%x8|E)jx G*`s0                                                                <input type="text" name="password" id="password" pattern="^[\w\u4e00-\u9fa5\-]{1,20}$" required="no" msg="密码不符合规则" />
`xi5tm.dQ3s5h l01~20个中文、字母、下划线或者减号无忧脚本i'mHeE IK3_;?
                                                        </p>
8Y2} v8^,L }3j0                                                        <p>无忧脚本Y"BE!r7s;YVmd0Zm
                                                                <label>确认密码:(same="password")</label>无忧脚本q _-i%p ]`.N h
                                                                <input type="text" name="password2" same="password" msg="两次密码不一样"/>
(Uy/@j.@@0                                                        </p>
$rTN[%gAh0                                                        <p>无忧脚本MFU'f:m _
                                                                <label>email:[选填]</label>无忧脚本Wa-F ivPt0yNM0Y
                                                                <input type="text" pattern="^(?:(?:[\w-\.]+)@(?:(?:\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(?:(?:[\w-]+\.)+))(?:[a-zA-Z]{2,4}|[0-9]{1,3})(?:\]?))$" required="no" name="email" msg="email验证不通过"/>
G&@*{7Q Bqbj0(为空不验证,不为空的时候验证)
q_ M C7A @TdR0                                                        </p>
4q0j&Atpw0                                                        <p>无忧脚本!jlb4t]9u(E
                                                                <label>备注(选填,字数不超100)</label>无忧脚本8J#hd1`2]gl{%fB;U#[
                                                                <textarea name="memo" cols="80" rows="4" required="no" pattern="^[\w\W]{0,100}$" msg="字数已经超出" ></textarea>
Q)lma OS(A0~B0                                                        </p>
&_%bo5Jzf7~O0                                                        <p class="center">无忧脚本+q;nqp:q$s/{
                                                                <button type="submit">提交</button>
TG"l\0y-m%I'x%Mj0                                                                <button type="reset">取消</button>
9SK |(?3Fpv8sGv0                                                        </p>        </fieldset>无忧脚本D7]~}1_f:K [
</form>
1mw gky v8L0</body>
wiE!IqQzn EN$Z0</html>
正则以更改好,请下面两位朋友再行测试
1yfC}G2P0无忧脚本N:N o6N[e
[本帖最后由 brull 于 2007-4-25 18:29 编辑]

TAG: javascript JValidator 表单验证 通用

tingwei的个人空间 tingwei 发布于2007-04-25 08:16:20
收藏了。
向导发布于2007-04-25 13:02:53
备注(选填,字数不超100)6bX/l(vz#i@yrB
输入个'看看
chpoon的个人空间 chpoon 发布于2007-04-25 13:33:07
没多大意义吧,看看我的测试结果,根本就不正确
n'c.@%G$wM%vwww.51js.com而且可能还有内存泄漏的问题哦!
未命名.JPG

未命名.JPG

satans17的个人空间 satans17 发布于2007-04-25 13:54:16
还是不错的~
(~%N
Oe%VOb|-//体验编写HTML代码的乐趣 - 51JS.COM
顶一个~
Brull与无忧同在 brull 发布于2007-04-25 16:23:43

QUOTE:

原帖由 chpoon 于 2007-4-25 13:33 发表 r.I;l,U        EA4{I
没多大意义吧,看看我的测试结果,根本就不正确-//体验编写HTML代码的乐趣 - 51JS.COM(g,s3cnm9}
w+`l~

而且可能还有内存泄漏的问题哦!
"AAa1M6F({S9O8Z-//体验编写HTML代码的乐趣 - 51JS.COM内存泄漏? 不会吧?请问是什么问题引起内存泄漏?恳望答复,谢谢无忧脚本-//体验编写HTML代码的乐趣 - 51JS.COM[f/M1i[8~
然后报错是正则不对,请看表单前的正则,拜托
K4Am/O*@'g5g
LX无忧脚本
马上改正则阿www.51js.comnIU1e(g4lw

?
w        AAbP无忧脚本,无忧,脚本,JavaScript,JS,HTML,DHTML,CSS,XML,XSL
[ 本帖最后由 brull 于 2007-4-25 16:32 编辑 ]
Brull与无忧同在 brull 发布于2007-04-25 16:26:15

QUOTE:

原帖由 向导 于 2007-4-25 13:02 发表
?!KT6ym*VU&[无忧脚本-//体验编写HTML代码的乐趣 - 51JS.COM备注(选填,字数不超100)无忧脚本C%u(O*|f8U#j7H%q
输入个'看看
JxlaZ;h-//体验编写HTML代码的乐趣 - 51JS.COM这个是正则的问题,因为这里是个例子,所以写的时候直接是复制粘贴www.51js.com%b$F4_&x N+c^^Hke
为了不误导大众,马上改正则
figurine发布于2007-04-25 17:08:58
妮称先输入字母,再输入单引号也是正确的??www.51js.com}/igD
_r

无忧脚本-//体验编写HTML代码的乐趣 - 51JS.COMI1N6Rq4[zm2nex^        i
如:adsfs''''''''''''''''
秦皇也爱JS的个人空间 秦皇也爱JS 发布于2007-04-25 17:23:22
不错!
Brull与无忧同在 brull 发布于2007-04-25 18:13:09

QUOTE:

原帖由 figurine 于 2007-4-25 17:08 发表
:s`"W        Y7USk6n无忧脚本,无忧,脚本,JavaScript,JS,HTML,DHTML,CSS,XML,XSL 妮称先输入字母,再输入单引号也是正确的??-//体验编写HTML代码的乐趣 - 51JS.COMc4]:W!y$o8N!nq
6tWR2}3xj?2?
如:adsfs''''''''''''''''
无忧脚本,无忧,脚本,JavaScript,JS,HTML,DHTML,CSS,XML,XSLT6yw6`*\j{YLM`"m
正则还是有问题,谢谢提醒,已更正
yangmeifu发布于2007-04-26 12:55:34
备注那里还可以输入特殊字符
飞飞小剑发布于2007-04-26 14:11:53
行:89
;\]Yj@l0L字符:6无忧脚本,无忧,脚本,JavaScript,JS,HTML,DHTML,CSS,XML,XSL6V R%~'Ax
代码:0
2j&K3p+`? M%H错误:参数无效。
Brull与无忧同在 brull 发布于2007-04-26 14:47:03

QUOTE:

原帖由 yangmeifu 于 2007-4-26 12:55 发表
/]m1j;Wk0Y*i.|-//体验编写HTML代码的乐趣 - 51JS.COM备注那里还可以输入特殊字符
www.51js.com'r$C;Q        N5p(t
o^-T        n+a

拜托,目前提的怎么都是正则问题,可以输入特殊字符是我正则设置让它可以输入的,我的正则是/^[\W\w]{0,100}$/www.51js.comq        pX_O7Y&z
so,这个不是问题,也请后面的朋友不要再提类似的问题
Brull与无忧同在 brull 发布于2007-04-26 14:48:11

QUOTE:

原帖由 飞飞小剑 于 2007-4-26 14:11 发表 无忧脚本-//体验编写HTML代码的乐趣 - 51JS.COM5@z3IQX"GM;H
行:89
GpIvAdZ'}-//体验编写HTML代码的乐趣 - 51JS.COM字符:6无忧脚本-//体验编写HTML代码的乐趣 - 51JS.COM'U3Th&\[2flm[
代码:0
*eLwM'](h.g}~-//体验编写HTML代码的乐趣 - 51JS.COM错误:参数无效。
Js]a%j6bRz(t$I无忧脚本-//体验编写HTML代码的乐趣 - 51JS.COM请问阁下用的什么浏览器
#Jw(R@/w%KNv%L'E-//体验编写HTML代码的乐趣 - 51JS.COM偶代码在IE6、firefox2.0下测试通过
Brull与无忧同在 brull 发布于2007-04-28 18:52:21
更正了一个bug
xinge的个人空间 xinge 发布于2007-04-28 18:59:18
email验证时使用自动完成填入不会判断。
Brull与无忧同在 brull 发布于2007-04-28 21:32:09
提交的时候会逐个检查,没有关系的
罗里罗嗦夫斯基 lq 发布于2007-04-29 09:03:32
很不错。顶了。
Z/F
N-X2YHGR-//体验编写HTML代码的乐趣 - 51JS.COM

G:R-KQ[*Gb(I        |虽然以前见到过类似的。但都封装的不是很
罗里罗嗦夫斯基 lq 发布于2007-04-29 10:16:26
我在.net中测试不成功。一上午也没有查出是哪里的原因。请楼主帮查找一下原因

CODE:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="temp2.aspx.cs" Inherits="temp2" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>无标题页</title>
    <style type="text/css">
body{
        font-size:12px;
}
label{
        float:left;
        width:180px;
}
input {
        border:1px solid #D4D4D4;
        font-size:12px;
        width:180px;
}

fieldset{
        margin:5px;
        padding:0 12px 12px 12px;
        border:1px solid #D4D4D4;
        background-color:#F9F9F9;
}

fieldset legend {
        font-weight:bold;
}
button {
        margin:0 5px;
        height:20px;
        padding-left:5px;
        padding-right:5px;
        line-height:20px;
        font-size:12px;
        border:1px solid #D4D4D4;
        background-color:#F9F9F9;
}
</style>
<script type="text/javascript">
//基础函数
var isIE = /msie/i.test(navigator.userAgent);
String.prototype.trim=function(){
        return this.replace(/(^\s*)|(\s*$)/g,"");
}
if(!isIE){
        Event.prototype.__defineGetter__("srcElement",function(){
                var node=this.target;
                while(node.nodeType!=1)node=node.parentNode;
                return node;
        });
        HTMLElement.prototype.attachEvent=function(sType,foo){
                this.addEventListener(sType.slice(2),foo,false);
        }
        HTMLElement.prototype.__defineGetter__("innerText",function(){
                return this.textContent;
        });
        HTMLElement.prototype.__defineSetter__("innerText",function(str){
                this.textContent = str;
        });
        HTMLElement.prototype.insertAdjacentElement=function(where,parsedNode){
                switch(where){
                        case "beforeBegin":
                this.parentNode.insertBefore(parsedNode,this);
                break;
            case "afterBegin":
                this.insertBefore(parsedNode,this.firstChild);
                break;
            case "beforeEnd":
                this.appendChild(parsedNode);
                break;
            case "afterEnd":
                if(this.nextSibling)
                    this.parentNode.insertBefore(parsedNode,this.nextSibling);
                else
                    this.parentNode.appendChild(parsedNode);
                break;
                }
        }
    HTMLElement.prototype.insertAdjacentHTML=function(where,htmlStr){
        var r=this.ownerDocument.createRange();
        r.setStartBefore(this);
        var parsedHTML=r.createContextualFragment(htmlStr);
        this.insertAdjacentElement(where,parsedHTML);
        }

}
else document.execCommand("BackgroundImageCache",false,true);
function $(id){return (typeof id == "string" ? document.getElementById(id) : id);}
function $N(name){return document.getElementsByName(name);}
function $TN(name,root){return root ? $(root).getElementsByTagName(name) : document.getElementsByTagName(name);}
function $F(id){return exist(id) ? $(id).value.trim() : null;}
function $IH(id,s){$(id).innerHTML = s;}
function $IT(id,s){$(id).innerText = s;}
function $iF(id,s){$(id).value = s;}
function $DC(name){return document.createElement(name);}
function isEmpty(str){return str.replace(/(?:null)|(?:undefined)/i,"").length == 0;}
function exist(id){return $(id)!= null;}
function hide(id){if(exist(id))$(id).style.display="none";}
function show(id){if(exist(id))$(id).style.display="";}
function nextSibling(id){return (($(id).nextSibling.nodeName == "#text" && $(id).nextSibling.Value == "") ? $(id).nextSibling.nextSibling : $(id).nextSibling);}
function removeNode(id){
        if(exist(id)){
                $(id).parentNode.removeChild($(id));
        }
}
</script>
<script type="text/javascript">
/******************************\
*@author brull
*@email [email]brull@163.com[/email]
*@date 2007-4-24
\******************************/

/**
*@param form 表单 id [可选]
*/
JValidator = function (form) {
        var form = $(form);
        var elements = form.elements;
        checkOne = function (obj){//验证单个表单元素
                var pass = true;
                var tip = $DC("span");
                var same = obj.getAttribute("same");
                var pattern = obj.getAttribute("pattern");
                var msg = obj.getAttribute("msg") != null ? obj.getAttribute("msg") : " ";//默认为一空格
                var required = obj.getAttribute("required") != "no";//默认为yes
                var span = nextSibling(obj);
                var checked = span != null ? span.nodeName == "SPAN" : false;
                if(same != null)same = $F(same);
                obj.value = $F(obj);
                tip.style.padding = "1px 1px 1px 20px";
                if(checked) removeNode(span);
                if(same != null){
                        if(same != obj.value){
                                with (tip.style){
                                        border = "1px dashed #D4D4D4";
                                        background = "#FFFF99 url([img]http://www.51js.com/attachments/2007/04/35270_200704250744301.gif[/img]) no-repeat 1px -104px";
                                }
                                pass = false;
                        }
                        else {
                                tip.style.background = "url([img]http://www.51js.com/attachments/2007/04/35270_200704250744301.gif[/img]) no-repeat 1px -8px";
                                msg = " ";
                        }
                        $IT(tip,msg);
                        obj.insertAdjacentElement("afterEnd",tip);
                }
                else if(pattern != null){
                        pattern = new RegExp(pattern);
                        if(required || obj.value.length > 0){
                                if(!pattern.test(obj.value)){
                                        with (tip.style){
                                                border = "1px dashed #D4D4D4";
                                                background = "#FFFF99 url([img]http://www.51js.com/attachments/2007/04/35270_200704250744301.gif[/img]) no-repeat 1px -104px";
                                        }
                                        pass = false;
                                }
                                else {
                                        tip.style.background = "url([img]http://www.51js.com/attachments/2007/04/35270_200704250744301.gif[/img]) no-repeat 1px -8px";
                                        msg = " ";
                                }
                                $IT(tip,msg);
                                obj.insertAdjacentElement("afterEnd",tip);
                        }
                }
                return pass;
        }
        this.checkScope = function(id){//验证某个元素范围内的表单
                if(!$(id)) return true;
                var pass = true;
                var elements = new Array();
                elements[0] = $TN("input",$(id));
                elements[1] = $TN("select",$(id));
                elements[2] = $TN("textarea",$(id));
                for(var i = 0; i < elements.length; i++){
                        for(var j = 0; j< elements[i].length; j++) {
                                if(!checkOne(elements[i][j]) && pass) pass = false;
                        }
                }
                return pass;
        }
        this.check = function(){//验证整个表单
                var pass = true;
                for(var i = 0; i < elements.length; i++){
                        if(elements[i].nodeName != "BUTTON" && elements[i].nodeName != "FIELDSET" && !checkOne(elements[i]) && pass) pass = false;
                }
                return pass;
        }
        //邦定事件
        for(var i = 0; i < elements.length; i++){
                if(elements[i].getAttribute("pattern") != null || elements[i].getAttribute("same") != null){
                        elements[i].attachEvent("onchange",function(event){checkOne(event.srcElement);});
                }
        }
}
</script>
<script type="text/javascript">
/**********应用例子**********/
window.onload = function (){
        v = new JValidator("form1");
        $("form1").onsubmit = function(){return v.check();}
       
}
</script>

</head>
<body>
    <form id="form1" runat="server">
    <fieldset>
<legend>使用说明</legend>
<p>
<strong>元素定义:</strong><br />ƒ、在需要验证的元素里定义好下面几个属性:<br />
(1)、pattern:验证该元素的正则表达式,没有“/”分隔符,如果定义了same属性的话,就不再需要定义它<br />
(2)、msg 可选的属性,在验证不通过时显示的信息<br />
(3)、required 可选的属性,属性值 yes|no,yes,[默认] 该元素必填,no,该元素非必填,但如果填写内容后,将按pattern的定义来验证填写的内容<br />
(4)、same 该元素和那个元素的内容必须相同,属性值为另一元素之id值,如果定义了它,验证将拿元素的id为定义的属性值的元素的值来和该元素值比较
</p>
<p>
<strong>程序使用:</strong><br />
window.onload = function (){<br />
        v = new JValidator("form1");<br />
        $("form1").onsubmit = function(){return v.check();}<br />
}<br />
<span style="color:#FF0000">使用时请将程序里面的图片地址[img]http://www.51js.com/attachments/2007/04/35270_200704250744301.gif[/img]改为你所需 </span><br />
同时里面还定义了一个方法checkScope,就是只验证给定范围里的表单元素,这个在表单分多步完成时很有用,这里就不写例子了,又兴趣的可以自己研究
</p>
</fieldset>
        <fieldset>
        <legend>测试表单</legend>
<p>
                                                                <label>昵称:</label>                                                               
    <asp:TextBox ID="TxtUid" runat="server" pattern="^[\w\u4e00-\u9fa5\-]{1,20}$" msg="昵称不符合规则"></asp:TextBox>ƒ~20个中文、字母、下划线或者减号
                </p>
                                                        <p>
                                                                <label>密码:</label>
                                <asp:TextBox ID="TxtPwd" TextMode="Password" runat="server" pattern="^[\w\u4e00-\u9fa5\-]{1,20}$" required="no" msg="密码不符合规则"></asp:TextBox>ƒ~20个中文、字母、下划线或者减号
                                                        </p>
                                                        <p>
                                                                <label>确认密码:(same="password")</label>
                                <asp:TextBox ID="TxtPwd2" runat="server"  same="TxtPwd" msg="两次密码不一样"></asp:TextBox>
                                                        </p>
                                                        <p>
                                                                <label>email:[选填]</label> 
                                <asp:TextBox ID="TxtEmail" runat="server"  pattern="^(?:(?:[\w-\.]+)@(?:(?:\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(?:(?:[\w-]+\.)+))(?:[a-zA-Z]{2,4}|[0-9]{1,3})(?:\]?))$" required="no" msg="email验证不通过"> </asp:TextBox>(为空不验证,不为空的时候验证)
                                                        </p>
                                                        <p>
                                                                <label>备注(选填,字数不超100个任意字符)</label>
                                <asp:TextBox ID="TxtRemark" runat="server" Height="77px" required="no" pattern="^[\w\W]{0,100}$" msg="字数已经超出"></asp:TextBox>
                                                               
                                                        </p>
                                                        <p class="center">
                                <asp:Button ID="BtnOK" runat="server" Text="Button" Width="65px" OnClick="Button1_Click" /></p>        </fieldset>
    </form>
</body>
</html>

灵光一现 object 发布于2007-04-29 10:53:44
思路还是不错的~
Brull与无忧同在 brull 发布于2007-04-29 17:34:40

QUOTE:

原帖由 lq 于 2007-4-29 10:16 发表

oOl.hH;[De
Y.HZA1nwww.51js.com
我在.net中测试不成功。一上午也没有查出是哪里的原因。请楼主帮查找一下原因www.51js.com9T1j!|G"Tb,K

+_2h7^r        yBd
m?Ywww.51js.com

]V7\V+_M;UB-L无忧脚本
H4@
t:`BcP无忧脚本
无忧脚本,无忧,脚本,JavaScript,JS,HTML,DHTML,CSS,XML,XSL\H.xDd},c
无忧脚本,无忧,脚本,JavaScript,JS,HTML,DHTML,CSS,XML,XSL$^8pkGC O Er
%N(_:k;P9x![
    无标题页无忧脚本,无忧,脚本,JavaScript,JS,HTML,DHTML,CSS,XML,XSL{        o]"]4q9WD
s

    无忧脚本@/q:i({.{S z1a
body{
4@[n*rin0rwww.51js.com        font-size:12px;无忧脚本,无忧,脚本,JavaScript,JS,HTML,DHTML,CSS,XML,XSLMO;s [O-C [
}k
D:vA7Cu$j7c

label{无忧脚本-//体验编写HTML代码的乐趣 - 51JS.COM0z,My#jHGl
        float:left;无忧脚本-//体验编写HTML代码的乐趣 - 51JS.COM-c @@
b;Y1b2e C]U8p

        width:180px;无忧脚本'}1@G8aP
}www.51js.com.c)i @0v Z0}CN&dW
input {
$D X-B1]9S-p*x:{-//体验编写HTML代码的乐趣 - 51JS.COM        border:1px  ...
www.51js.comt:SP4`I0k
偶是。net白痴jim]c*h}
印象里runat server的控件在编译后id后面会添加一段字符串,你在前台查看原代码就知道了
我来说两句

(可选)