浏览 1882 次
锁定老帖子 主题:万能的表单验证设计
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-05-25
最后修改:2009-05-25
平时用到的表单验证库,功能是异常的强大,但里面实际用到的却不多,为了几个验证就拖一个库,实在不值,不如自己设计个实用的函数解决这验证问题。 1.能对指定的多个字段进行验证 好了,这些功能够了吧,能应该验证N+1种表单了。 /** * 这个函数利用了JS动态语言特性,看上去很神秘,实际是很形象的,举个例子就明了. */ validate: function() { var args = CC.$A(arguments), form = null; //form如果不为空元素,应置于第一个参数中. if (!CC.isArray(args[0])) { form = CC.$(args[0]); args.remove(0); } //如果存在设置项,应置于最后一个参数中. //cfg.queryString = true|false; //cfg.callback = function //cfg.ignoreNull //nofocus:true|false var b = CC.isArray(b) ? {}: args.pop(), d; var queryStr = b.queryString, ignoreNull = b.ignoreNull, cb = b.callback; var result = queryStr ? '': {}; CC.each(args, function(i, v) { //如果在fomr中不存在该name元素,就当id来获得 var obj = v[0].tagName ? v[0] : form ? form[v[0]] : CC.$(v[0]); //console.debug('checking field:',v, 'current value:'+obj.value); var value = obj.value, msg = v[1], d = CC.isFunction(v[2]) ? v[3] : v[2]; //选项 if (!d || typeof d != 'object') d = b; //是否忽略空 if (!d.ignoreNull && (value == '' || value == null)) { //如果不存在回调函数,就调用alert来显示错误信息 if (!d.callback) CC.alert(msg, obj, form); //如果存在回调,注意传递的三个参数 //msg:消息,obj:该结点,form:对应的表单,如果存在的话 else d.callback(msg, obj, form); //出错后是否聚集 if (!d.nofocus) obj.focus(); result = false; return false; } //自定义验证方法 if (CC.isFunction(v[2])) { var ret = v[2](value, obj, form); var pass = (ret !== false); if (CC.isString(ret)) { msg = ret; pass = false; } if (!pass) { if (!d.callback) CC.alert(msg, obj, form); //同上 else d.callback(msg, obj, form); if (!d.nofocus) obj.focus(); result = false; return false; } } //如果不设置queryString并通过验证,不存在form,就返回一个对象, //该对象包含形如{elementName|elementId:value}的数据. if (queryStr && !form) { result += (result == '') ? ((typeof obj.name == 'undefined' || obj.name == '') ? obj.id: obj.name) + '=' + value: '&' + v[0] + '=' + value; } else if (!form) { result[v[0]] = value; } }); //如果设置的queryString:true并通过验证,就返回form的提交字符串. if (result !== false && form && queryStr) result = CC.formQuery(form); return result; } OK,关键部分已完成, 举个例子说明: /** * validate应用例子 */ //测试邮箱格式 function isMail(strMail) { return /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/.test(strMail); } //密码长度>=6 function checkPassword(v) { return v.length >= 6; } //两次密码要相同 function isTheSame(v, obj, form) { return form ? form.password.value == v: CC.$('password').value == v; } //出错时自定回调 function myCallback(msg, obj, form) { alert("出错显示的消息是:" + msg + " - 元素:" + obj.name + ",所在form:" + (form ? form.id: '无')); } //存在Form的例子 function testForm() { var result = CC.validate('testForm', ['username', '请输入用户名。'], ['mail', '邮箱格式不正确。', isMail], ['password', '密码长度大于或等于6。', checkPassword], //完整的配置示例 ['password2', '两次密码不一致。', isTheSame, {nofocus: false,callback: myCallback,ignoreNull: false} ], {queryString: true}); if (result !== false) alert("恭喜,通过验证!提交的字符串是:" + result); return result; } //无Form的例子. function testNoForm() { var result = CC.validate( //既然没form了,这里不必存入form id作为第一个参数. ['username', '请输入用户名。'], ['mail', '邮箱格式不正确。', isMail], ['password', '密码长度大于或等于6。', checkPassword], ['password2', '两次密码不一致。', isTheSame, {nofocus: false, callback: myCallback, ignoreNull: false} ], //函数最后一个参数 { queryString: true}); if (result !== false) alert("恭喜,通过验证!提交的字符串是:" + result); return result; }
是不是很方便,一看就会用? 点击此处
下载本文可运行示例。
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |