关于作者

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

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

查看( 2769 ) / 评论( 41 )

CODE:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">无忧脚本+B?-@%}3w4Mw J
<html xmlns="http://www.w3.org/1999/xhtml">
gY^:n[wY0<head>无忧脚本E*MCL&|&nE
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
h+Z nZWa+Ue+Q0<title>JValidator 通用表单验证类</title>无忧脚本xF7~sA{E:kb0o
<style type="text/css">
5|4Ope3W1M0body{无忧脚本f6U:i;B c v1L_#u8F
        font-size:12px;无忧脚本;XKqSsi*C
}
z,i@B|#Cjp0label{
V(~h`yQ,f@0        float:left;
[ y$D4PI/RWV:P O0        width:180px;无忧脚本3O;u/N/PT4e h
}无忧脚本}.E'v2MH
input {无忧脚本tw0\D8j
        border:1px solid #D4D4D4;
Gun6B9cb'hI8a [A1X0        font-size:12px;
9|sc*oO3eo @ Bv A0        width:180px;
t"is [xr zQy4L0}无忧脚本-N mF o;M N:?]
无忧脚本LL L3D.?5W9j'm5i0C
fieldset{无忧脚本\TRGc\+y
        margin:5px;
d"uc0q5|0        padding:0 12px 12px 12px;无忧脚本TQ |uH|
        border:1px solid #D4D4D4;无忧脚本.|:v@2g9z3E
        background-color:#F9F9F9;无忧脚本&q o lM(a
}
5?.| ?vK\o0无忧脚本:@ c&["RoMZ
fieldset legend {无忧脚本H4q}E~n)g1o
        font-weight:bold;无忧脚本%GTk&]rt[
}
^'AhS5s0button {无忧脚本]5]"K3^f$eaQ
        margin:0 5px;
M%K wfn'a0        height:20px;无忧脚本 _ GO:nv1y
        padding-left:5px;
D-x1[3X4t Or,f0        padding-right:5px;无忧脚本1SNijfF.e
        line-height:20px;
2@hako2m/M6E0        font-size:12px;
F8F8k1["J uq0        border:1px solid #D4D4D4;无忧脚本{*e Zo xSn s3\%k?
        background-color:#F9F9F9;
F'~S7` D@x8M^\0}
,Ik5F.Os,gD(J0</style>无忧脚本u p1U s,z#[
<scrīpt type="text/javascrīpt">
A$vt Po+qM0//基础函数无忧脚本\Zk1U"i)Z vP
var isIE = /msie/i.test(navigator.userAgent);
(h3sEZE$X&BG}0String.prototype.trim=function(){无忧脚本ONb#fw{y g
        return this.replace(/(^\s*)|(\s*$)/g,"");无忧脚本*FgRm(F \
}无忧脚本\0u(Iu$Z5A&K
if(!isIE){无忧脚本5DX:e#b a$r4M
        Event.prototype.__defineGetter__("srcElement",function(){无忧脚本$Cek7@:S(V*k-K
                var node=this.target;
w(xoSWN5y f$V+mE0                while(node.nodeType!=1)node=node.parentNode;无忧脚本r*qari)`1[9x
                return node;无忧脚本/@1WH5Oy_EY
        });无忧脚本\n@8f,g;gt
        HTMLElement.prototype.attachEvent=function(sType,foo){
*P)R[u;`0{] {7~0                this.addEventListener(sType.slice(2),foo,false);
A T[F&T%P0        }无忧脚本!^?-MM2o'o
        HTMLElement.prototype.__defineGetter__("innerText",function(){无忧脚本)~y O4}*Kh
                return this.textContent;
:{.dW Fx0        });无忧脚本HLr#@i&CS1]&t1t
        HTMLElement.prototype.__defineSetter__("innerText",function(str){
Qr'y ^XGiL0                this.textContent = str;
4v }X)B-pw+f0khR0        });无忧脚本 f!a7DE.U#p
        HTMLElement.prototype.insertAdjacentElement=function(where,parsedNode){
c ff'}?2H:IE0                switch(where){
}+\F$ZBJ6{0                        case "beforeBegin":
-N1V O!UTj:Y*v SP0                this.parentNode.insertBefore(parsedNode,this);无忧脚本jZ6wI'O6B7TVW*o
                break;
%\ g0A A'\|K0            case "afterBegin":
^D [S,V0                this.insertBefore(parsedNode,this.firstChild);无忧脚本#j+f,Y3e SL1X)T
                break;无忧脚本y:Ys!{'cX
            case "beforeEnd":
{rW&acM0                this.appendChild(parsedNode);
&b A't8Yd2Ng/KI"r C(o0                break;
W(Q/NC:Sp4X5z0            case "afterEnd":
SM,_5U"I~0                if(this.nextSibling)
9JysS$xL'I0                    this.parentNode.insertBefore(parsedNode,this.nextSibling);
'X&x.xG#g s0xl0                else
w)D r A]V0                    this.parentNode.appendChild(parsedNode);
B*_4K4PM.p}0                break;
-A1`M#c)N]`1\0                }
b3vtZ7`0        }
*F,f5L.R"{5h;l0    HTMLElement.prototype.insertAdjacentHTML=function(where,htmlStr){
z d.w3nE%}0_s0        var r=this.ownerDocument.createRange();无忧脚本5^ hT'o"`!SE
        r.setStartBefore(this);无忧脚本4_%{/~)Nd_
        var parsedHTML=r.createContextualFragment(htmlStr);无忧脚本.P\ ap6lQ/h
        this.insertAdjacentElement(where,parsedHTML);
s'N$K{$?'L-C N6j5n0        }无忧脚本pZ6fx%c `8sj,r
无忧脚本2B TE Qw6o
}无忧脚本D*K,s2S1Tr8Z v+@
else document.execCommand("BackgroundImageCache",false,true);无忧脚本HOP%?m.L _RRqaS
function $(id){return (typeof id == "string" ? document.getElementById(id) : id);}无忧脚本Q!A2kMS'K3i
function $N(name){return document.getElementsByName(name);}
u-~u IMJ^q0function $TN(name,root){return root ? $(root).getElementsByTagName(name) : document.getElementsByTagName(name);}
k)m'GbBlT&D0function $F(id){return exist(id) ? $(id).value.trim() : null;}
x6v5SXI6a`(C0function $IH(id,s){$(id).innerHTML = s;}
P:j7^#_a,Jb _V0function $IT(id,s){$(id).innerText = s;}无忧脚本;R+H Y"_ }|:\ W8Z
function $iF(id,s){$(id).value = s;}无忧脚本8MG`:s!GfF*V
function $DC(name){return document.createElement(name);}
+T9SW p%mJ;q T0G6o8u0function isEmpty(str){return str.replace(/(?:null)|(?:undefined)/i,"").length == 0;}
` w9m v Kfuhp0function exist(id){return $(id)!= null;}无忧脚本 ^8wY%cE:\:Z^
function hide(id){if(exist(id))$(id).style.display="none";}无忧脚本2z9~7I F4~*Q,Y%GZ
function show(id){if(exist(id))$(id).style.display="";}无忧脚本L,BA[`u
function nextSibling(id){return (($(id).nextSibling.nodeName == "#text" && $(id).nextSibling.Value == "") ? $(id).nextSibling.nextSibling : $(id).nextSibling);}无忧脚本.`"YJ] x|2T
function removeNode(id){
7rf+DK{Gyf0        if(exist(id)){无忧脚本4|ht^*k
                $(id).parentNode.removeChild($(id));
4j5J V}"dgi0        }无忧脚本:w+ohtI#A*[f
}无忧脚本 s.zzC}4x9[mm
</scrīpt>
A*f9pC^m"^9p0<scrīpt type="text/javascrīpt">无忧脚本|J#woY1p
/******************************\无忧脚本h?R yz!n*^
*@author brull无忧脚本7M kg'F@uN)G8\ u
*@email [email]brull@163.com[/email]无忧脚本Eb%t3n-q
*@date 2007-4-24
*M l6S4E|T:o0\******************************/无忧脚本(qw7\)U6PBG.r%Z6wj

wl7r~\qQ1{0/*
zu[y|R%HK+u0*表单通用验证类,需要在表单元素属性里添加两个属性无忧脚本rcP~ V
*pattern 为检验该元素内容是否合法的正则表达式 [必须]
"h/s!D6y:v2`'{W0*msg 出错是告诉用户的信息 [可选]
1E+Q+j!O vl{:D*O0*required 该元素内容是否必须填写 [可选]无忧脚本 dMhEO+WN
*/无忧脚本QOVG-KHG7r;L]2K

Yf F6?,AE(M7XY r0/**
&r0q,`%V8qge#}A!^N0*@param form 表单 id [可选]
9z]*A G"]0*/无忧脚本eH;RIw^J_
JValidator = function (form) {
!\j XO\)k2W0        var form = $(form);无忧脚本+UBXL C]
        var elements = form.elements;
CG%CK'g"uJJg0        checkOne = function (obj){//验证单个表单元素无忧脚本O&D~~7{6d/d+Q)O,x9t o
                var pass = true;无忧脚本0~ C/T B*X5X S
                var tip = $DC("span");
9|S Xe9pC6b)B{0                var same = obj.getAttribute("same");无忧脚本 ~([CeC;u-X*R
                var pattern = obj.getAttribute("pattern");无忧脚本xQ0O g5| @y)N
                var msg = obj.getAttribute("msg") != null ? obj.getAttribute("msg") : " ";//默认为一空格
-|Gub&C0                var required = obj.getAttribute("required") != "no";//默认为yes无忧脚本F@j1b d,t
                var span = nextSibling(obj);无忧脚本"u/wZqu ^h5[ ix
                var checked = span != null ? span.nodeName == "SPAN" : false;
1H]2i:B0x2Xj v'm0                if(same != null)same = $F(same);
h!FwmM$I2y\LX0                obj.value = $F(obj);
7Cu5v)s2Y IZ,c0                tip.style.padding = "1px 1px 1px 20px";无忧脚本0}sPHSuHV
                if(checked) removeNode(span);无忧脚本4EG*kVLW
                if(same != null){无忧脚本APjk!i
                        if(same != obj.value){无忧脚本 y-E XANM
                                with (tip.style){
,Gc{2v:Bb)I)}${0                                        border = "1px dashed #D4D4D4";无忧脚本Q BZ"Dr0G
                                        background = "#FFFF99 url([img]http://www.51js.com/attachments/2007/04/35270_200704250744301.gif[/img]) no-repeat 1px -104px";
cZr u1x0                                }无忧脚本JMP(Ti _`a7UI
                                pass = false;无忧脚本.dAK6J:G f
                        }
~;N8VU"Lr$~;a6[0                        else {无忧脚本&c%\?[W3H Y
                                tip.style.background = "url(http://www.51js.com/attachments/2007/04/35270_200704250744301.gif) no-repeat 1px -8px";无忧脚本 I%tD/ad1v
                                msg = " ";
2QI+Z"E;x\0                        }无忧脚本$oZ2l M2V~
                        $IT(tip,msg);无忧脚本]S%i;R Rg
                        obj.insertAdjacentElement("afterEnd",tip);无忧脚本,Ks [~B!loMIL2Tf/e
                }无忧脚本wQm|`{
                if(pattern != null){无忧脚本 L6[LqH&`
                        pattern = new RegExp(pattern);
'tR O:s(wA4oy0                        if(required || obj.value.length > 0){
B(MOB8D X9{0                                if(!pattern.test(obj.value)){无忧脚本.V e6_)TWtQn
                                        with (tip.style){无忧脚本 ]"X MHvQ3PF
                                                border = "1px dashed #D4D4D4";
+Y~!I5t5G'MA;A*g/y0                                                background = "#FFFF99 url(http://www.51js.com/attachments/2007/04/35270_200704250744301.gif) no-repeat 1px -104px";无忧脚本"_g(uG#sC
                                        }
c EDy7U/_ s0                                        pass = false;
%U4Ko#tY\0                                }无忧脚本R(k?g*XH
                                else {无忧脚本+q{4Z"g6{C
                                        tip.style.background = "url(http://www.51js.com/attachments/2007/04/35270_200704250744301.gif) no-repeat 1px -8px";
0kg*R~T0                                        msg = " ";无忧脚本O Ik ZyxI)c6q
                                }无忧脚本/CB d#A'kg3g
                                $IT(tip,msg);
cI.k m o&F q'?0                                obj.insertAdjacentElement("afterEnd",tip);
(_&qa#p!tn0                        }
E%S8q*H%fSZ0Ey!C0                        return pass;
9Y5d/G0Xk x!i&D0                }无忧脚本.y!{?:L(Y,v
        }
5c0L;Na,OA$d0        this.checkScope = function(id){//验证某个元素范围内的表单无忧脚本$c7A9M8S ^TA"?
                if(!$(id)) return true;无忧脚本tM*|Ja*X
                var pass = true;无忧脚本X0u;]!Bt
                var elements = new Array();无忧脚本j:l v9w[
                elements[0] = $TN("input",$(id));无忧脚本kv3YE}
                elements[1] = $TN("select",$(id));
6^uI%?UQX U0                elements[2] = $TN("textarea",$(id));无忧脚本)S3Ws4dgp
                for(var i = 0; i < elements.length; i++){无忧脚本v|!b)z@@
                        for(var j = 0; j< elements[i].length; j++) {
Up"]9w)o0                                if(!checkOne(elements[i][j]) && pass) pass = false;无忧脚本:}V1B*|pz)N
                        }无忧脚本.P(j1D!^|P,F#S+m
                }无忧脚本1R0j(G4c2V9{Y.O_
                return pass;
%|-Y-tfp&Q/o0        }
9z0FT'tK0        this.check = function(){//验证整个表单无忧脚本;J3[HB y ~z b
                var pass = true;
Xi&mHV&{r$C0                for(var i = 0; i < elements.length; i++){无忧脚本1l/i$t9}7X {L(H/o
                        if(elements[i].nodeName != "BUTTON" && elements[i].nodeName != "FIELDSET" && !checkOne(elements[i]) && pass) pass = false;无忧脚本oDm|(W3`i
                }
o;Q @|+zP:O0                return pass;
1yvFo"W L3V;AQ;M0        }
&z$JCi*bW0h:f0        //邦定事件
;D%WGV&M-C0        for(var i = 0; i < elements.length; i++){
T;i3UZ k5]r@v0                if(elements[i].getAttribute("pattern") != null || elements[i].getAttribute("same") != null){无忧脚本|2]3Lb!wGXN
                        elements[i].attachEvent("onchange",function(event){checkOne(event.srcElement);});无忧脚本&p E"Q8}z+b6UFJ,X
                }无忧脚本2MD6Z"W]
        }
!G ]x'EeCyH^0}无忧脚本 G }#ZNip ~Q iY|
</scrīpt>
P8wNAUW_+|0<scrīpt type="text/javascrīpt">
J9W;t%G ~3c0w _3o0/**********应用例子**********/
8k3f6^\0z%bXE_ V%Y0window.onload = function (){
8Y's7rU Cl2i8E0        v = new JValidator("form1");无忧脚本J0Ib x&Gyj
        $("form1").onsubmit = function(){return v.check();}
O%\D`6O0}无忧脚本-i y$\a J*}|2kj
</scrīpt>无忧脚本 rYT4y/u,T8K'@
</head>无忧脚本Z#c6YYc"d`

/mRT)bv5|3?)c0<body>无忧脚本QCWQJ;{i
<fieldset>无忧脚本*X M~M!g0Kh
<legend>使用说明</legend>
;p0bbc6Kz;F:ay-e0<p>
A z&c D ny8gs*[0<strong>元素定义:</strong><br />
F a9CJ8t}01、在需要验证的元素里定义好下面几个属性:<br />
[9Q&c |"o)O0(1)、pattern:验证该元素的正则表达式,没有“/”分隔符,如果定义了same属性的话,就不再需要定义它<br />无忧脚本x ACp$N
(2)、msg 可选的属性,在验证不通过时显示的信息<br />
?S W7vI9~;VM0(3)、required 可选的属性,属性值 yes|no,yes,[默认] 该元素必填,no,该元素非必填,但如果填写内容后,将按pattern的定义来验证填写的内容<br />
9c |'W2}M/kPv}0(4)、same 该元素和那个元素的内容必须相同,属性值为另一元素之id值,如果定义了它,验证将拿元素的id为定义的属性值的元素的值来和该元素值比较无忧脚本 U+x3CP7B
</p>无忧脚本 ~6@xEv
<p>无忧脚本5zo-`w\Mx-r(Y9z!b
<strong>程序使用:</strong><br />无忧脚本4i$};KGy!gn.mC
window.onload = function (){<br />无忧脚本1^g"@,Sn)n8D+p;h6r _
        v = new JValidator("form1");<br />
rn sOvj|0        $("form1").onsubmit = function(){return v.check();}<br />
E bo4i`~$?8JSc)q0}<br />
e2Ro[6|(c0<span style="color:#FF0000">使用时请将程序里面的图片地址[img]http://www.51js.com/attachments/2007/04/35270_200704250744301.gif[/img]改为你所需 </span><br />
7a!e%wZ?B[d0同时里面还定义了一个方法checkScope,就是只验证给定范围里的表单元素,这个在表单分多步完成时很有用,这里就不写例子了,又兴趣的可以自己研究
#@:E3V`{I.\0T"}0</p>
:XbFV-e9y0</fieldset>
'n&z4P7`:KF.u'JS8^0<form id="form1" name="form1" method="post" action="">无忧脚本;VS4I6J @ j.[
        <fieldset>无忧脚本#K2O)y&qB @O.ZS
        <legend>测试表单</legend>无忧脚本 hU%?;E+y's
<p>
!|$s{q$y;bI,o0                                                                <label>昵称:</label>无忧脚本B+o'|t*\ Nj?
                                                                <input type="text" name="nickname" pattern="^[\w\u4e00-\u9fa5\-]{1,20}$" msg="昵称不符合规则" />无忧脚本FQ'X1\T
1~20个中文、字母、下划线或者减号
;`$c{P)blxVC0                </p>无忧脚本\_+_)x%gv
                                                        <p>
{s,B y#B x&dB0                                                                <label>密码:</label>无忧脚本`]n1An?
                                                                <input type="text" name="password" id="password" pattern="^[\w\u4e00-\u9fa5\-]{1,20}$" required="no" msg="密码不符合规则" />无忧脚本N\#Y*T%Lxd
1~20个中文、字母、下划线或者减号
? _2v&c{2t%n0                                                        </p>无忧脚本0l"jP1G;Z$[!i
                                                        <p>
/~ WWh,Y6q$@.I0                                                                <label>确认密码:(same="password")</label>
~8s z;D.epx0                                                                <input type="text" name="password2" same="password" msg="两次密码不一样"/>无忧脚本.v1FSc^k
                                                        </p>
%rY7D$cmf0                                                        <p>无忧脚本1jY'yD1w_
                                                                <label>email:[选填]</label>无忧脚本 DE,C`9f/\]u
                                                                <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验证不通过"/>无忧脚本cL7iq7\r _
(为空不验证,不为空的时候验证)无忧脚本_.N g M'y*h
                                                        </p>无忧脚本Bp2^O gX.oHA
                                                        <p>无忧脚本c^ R0ci
                                                                <label>备注(选填,字数不超100)</label>
*B)bzI@0                                                                <textarea name="memo" cols="80" rows="4" required="no" pattern="^[\w\W]{0,100}$" msg="字数已经超出" ></textarea>
u/iXix G0                                                        </p>
@_ [V%YR(LP!h%j0                                                        <p class="center">无忧脚本H An?8A^7f
                                                                <button type="submit">提交</button>无忧脚本a&Kh@YO
                                                                <button type="reset">取消</button>
u#]2LD"f `v0                                                        </p>        </fieldset>无忧脚本HH]HN
</form>无忧脚本*Tq&QL:lv5F
</body>
+LL(F$z{1x0</html>
正则以更改好,请下面两位朋友再行测试无忧脚本9k%J3U!H'e5_
无忧脚本+T}._)x itI w
[本帖最后由 brull 于 2007-4-25 18:29 编辑]

TAG: javascript JValidator 表单验证 通用

tingwei的个人空间 tingwei 发布于2007-04-25 08:16:20
收藏了。
向导发布于2007-04-25 13:02:53
备注(选填,字数不超100)
b,I m;t$r无忧脚本输入个'看看
chpoon的个人空间 chpoon 发布于2007-04-25 13:33:07
没多大意义吧,看看我的测试结果,根本就不正确
`&w&?d{u无忧脚本而且可能还有内存泄漏的问题哦!
未命名.JPG

未命名.JPG

satans17的个人空间 satans17 发布于2007-04-25 13:54:16
还是不错的~无忧脚本-//体验编写HTML代码的乐趣 - 51JS.COM8[I)fl~J-w#C
顶一个~
Brull与无忧同在 brull 发布于2007-04-25 16:23:43

QUOTE:

原帖由 chpoon 于 2007-4-25 13:33 发表
GPG!B#Vu无忧脚本,无忧,脚本,JavaScript,JS,HTML,DHTML,CSS,XML,XSL没多大意义吧,看看我的测试结果,根本就不正确www.51js.combj.}l ^/Ihw`
M

而且可能还有内存泄漏的问题哦!
PG-[0L(P.j#FAWwww.51js.com内存泄漏? 不会吧?请问是什么问题引起内存泄漏?恳望答复,谢谢3U:aL-n,Hd)P(w9wI7Q
然后报错是正则不对,请看表单前的正则,拜托-//体验编写HTML代码的乐趣 - 51JS.COM^a%dX1eb7L
马上改正则阿-//体验编写HTML代码的乐趣 - 51JS.COMxv#K,?IiX~%_
-//体验编写HTML代码的乐趣 - 51JS.COM/kJ&{r3\QVn ]
[ 本帖最后由 brull 于 2007-4-25 16:32 编辑 ]
Brull与无忧同在 brull 发布于2007-04-25 16:26:15

QUOTE:

原帖由 向导 于 2007-4-25 13:02 发表
EJDfDlpYwww.51js.com备注(选填,字数不超100)v?C!kG/H |
输入个'看看
$a Sta2t无忧脚本-//体验编写HTML代码的乐趣 - 51JS.COM这个是正则的问题,因为这里是个例子,所以写的时候直接是复制粘贴无忧脚本,无忧,脚本,JavaScript,JS,HTML,DHTML,CSS,XML,XSL0[ [4}T/|)y_QF g
为了不误导大众,马上改正则
figurine发布于2007-04-25 17:08:58
妮称先输入字母,再输入单引号也是正确的??
        b1ga7d'e!Cop8u-//体验编写HTML代码的乐趣 - 51JS.COM-//体验编写HTML代码的乐趣 - 51JS.COM9Xmrh$Mu3d
如:adsfs''''''''''''''''
秦皇也爱JS的个人空间 秦皇也爱JS 发布于2007-04-25 17:23:22
不错!
Brull与无忧同在 brull 发布于2007-04-25 18:13:09

QUOTE:

原帖由 figurine 于 2007-4-25 17:08 发表 无忧脚本-//体验编写HTML代码的乐趣 - 51JS.COM3M.uB6M
妮称先输入字母,再输入单引号也是正确的??无忧脚本,无忧,脚本,JavaScript,JS,HTML,DHTML,CSS,XML,XSL#I"P)Z%F9{"]

v$A$^H'H8EX%_8Q无忧脚本,无忧,脚本,JavaScript,JS,HTML,DHTML,CSS,XML,XSL如:adsfs''''''''''''''''
无忧脚本,无忧,脚本,JavaScript,JS,HTML,DHTML,CSS,XML,XSL
o3\| v \4QHe0B|$rvT

正则还是有问题,谢谢提醒,已更正
yangmeifu发布于2007-04-26 12:55:34
备注那里还可以输入特殊字符
飞飞小剑发布于2007-04-26 14:11:53
行:89无忧脚本,无忧,脚本,JavaScript,JS,HTML,DHTML,CSS,XML,XSLC/S z/J:unv"K
字符:6无忧脚本-//体验编写HTML代码的乐趣 - 51JS.COM$S W tn-^`3{:@
代码:0
C3z0_7Z*E
n H
M
错误:参数无效。
Brull与无忧同在 brull 发布于2007-04-26 14:47:03

QUOTE:

原帖由 yangmeifu 于 2007-4-26 12:55 发表 -//体验编写HTML代码的乐趣 - 51JS.COM~X(AE%@
备注那里还可以输入特殊字符
无忧脚本$WOx7K%B9LQL
拜托,目前提的怎么都是正则问题,可以输入特殊字符是我正则设置让它可以输入的,我的正则是/^[\W\w]{0,100}$/B,F
Uq[3G+W8EP

so,这个不是问题,也请后面的朋友不要再提类似的问题
Brull与无忧同在 brull 发布于2007-04-26 14:48:11

QUOTE:

原帖由 飞飞小剑 于 2007-4-26 14:11 发表
7j8E9c5J+I/]7^d}        |无忧脚本-//体验编写HTML代码的乐趣 - 51JS.COM行:89:@;}Wz*U
字符:6www.51js.com B(^Ih v
l8^4b#Q|

代码:0-//体验编写HTML代码的乐趣 - 51JS.COM&vL9Lz f6nUT)rw
错误:参数无效。
无忧脚本,无忧,脚本,JavaScript,JS,HTML,DHTML,CSS,XML,XSL e'Bi `~+@hd8n
请问阁下用的什么浏览器无忧脚本-//体验编写HTML代码的乐趣 - 51JS.COMNq DsX4j
偶代码在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
很不错。顶了。
{|p.b+Z0K"wK;u0vBwww.51js.com
A!dw        ~,q~Z无忧脚本,无忧,脚本,JavaScript,JS,HTML,DHTML,CSS,XML,XSL虽然以前见到过类似的。但都封装的不是很
罗里罗嗦夫斯基 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 发表
U$rQ
z^

我在.net中测试不成功。一上午也没有查出是哪里的原因。请楼主帮查找一下原因无忧脚本,无忧,脚本,JavaScript,JS,HTML,DHTML,CSS,XML,XSL{c.t}.hluZ
无忧脚本-//体验编写HTML代码的乐趣 - 51JS.COML.}nh/A`_ ]

)E
SY.`NI
cw9o
Db e!{

无忧脚本-//体验编写HTML代码的乐趣 - 51JS.COM4Av~a!QVh

y/G.b8`e-~无忧脚本
n6[-t
{/rh0hwww.51js.com
    无标题页nM9R)~,K7y*K
   
4Ij4|J&G7j]jD9U)Cwww.51js.combody{-//体验编写HTML代码的乐趣 - 51JS.COMLYq2k9mC8P K
        font-size:12px;www.51js.com,{Z|.o
oAP

}无忧脚本,无忧,脚本,JavaScript,JS,HTML,DHTML,CSS,XML,XSL5v_ wYA/wz$V
label{
[,gH n
u        o        x'^wFx-//体验编写HTML代码的乐趣 - 51JS.COM
        float:left;
j7k osZO3Owww.51js.com        width:180px;
5T,h.M1[0{|_M0V无忧脚本,无忧,脚本,JavaScript,JS,HTML,DHTML,CSS,XML,XSL}www.51js.comp6GFH"k6IE
input {
Xo^9Fs
|@4B"_-//体验编写HTML代码的乐趣 - 51JS.COM
        border:1px  ...
g        O&U;MJ/r无忧脚本,无忧,脚本,JavaScript,JS,HTML,DHTML,CSS,XML,XSL偶是。net白痴
,R1B0Gfp无忧脚本印象里runat server的控件在编译后id后面会添加一段字符串,你在前台查看原代码就知道了
我来说两句

(可选)