一个比较完善表单校验插件
2012-11-06 16:57
357 查看
(function($){
$.fn.jStar.defaults = {
validationAttr: 'vtype', //需要校验的标识属性
warnAttr: 'warnText', //校验错误时提示的文本属性
errorMsgs: ''
};
$.fn.isValid=function(){
var vFlds = findValidateFields($(this)),
foucusFlag=0;
options.errorMsgs='';
var showErrorMsgsLengthFlag= 0,
flag=0;//控制显示输入错误的提示信息条数
$(vFlds).each(function(){
var fldValidations=buildSingleFldVType(this);
var errorMsg=buildErrorMsg(fldValidations,this);
if(errorMsg&&3==showErrorMsgsLengthFlag&&0==flag){ //这个判断需要放在showErrorMsgsLengthFlag自增前面
options.errorMsgs+='<li>··· ···</li>';
flag++;
}
if(errorMsg&&showErrorMsgsLengthFlag<3){
options.errorMsgs+=errorMsg;
showErrorMsgsLengthFlag++;
}
});
//????光标定位????i still dont know how......
var firstErrorMsg=options.errorMsgs.substring(0,options.errorMsgs.indexOf('<br/>'));
if(firstErrorMsg){
var obj = $('[warnText]',this);
for(var i=0;i<obj.length;i++){
var errorMsg=$(obj[i]).attr('warnText');
if(firstErrorMsg==errorMsg){
// showErrorMsgs();
obj[i].focus();
return false;
}
}
}
if(options.errorMsgs.length>0)return false;
else return true;
};
function buildErrorMsg(fldValidations, field) {
var errorMsg = '';
for(var i = 0; i < fldValidations.length; i++){
var funcName = getVFunctionName(fldValidations[i]);
var params = buildVParams(fldValidations[i]);
if(!eval('$.fn.jStar.validations["'+funcName+'"](field, field.val()'+params+')')) {
errorMsg+='<li>'+$(field).attr(options.warnAttr)+'</li>';
}
}
return errorMsg;
}
//拿到需要校验元素的校验类型的参数。eg: range(1,100)
function buildVParams(validation) {
if(validation.indexOf('(') != -1) {
var arr = validation.substring(validation.indexOf('(') + 1, validation.length - 1).split(',');
var tempStr = '';
for(var i = 0; i < arr.length; i++) {
var single = trim(arr[i]);
if(parseInt(single)) {
tempStr += ','+single;
} else {
tempStr += ',"'+single+'"'
}
}
return tempStr;
} else {
return '';
}
}
//找到所有需要校验的元素
function findValidateFields(form) {
var tags = 'input textarea select'.split(' ');
var fields = [];
for(var i = 0; i < tags.length; i++) {
form.find(tags[i]+'['+options.validationAttr+']').each(function() {
if($(this).attr(options.validationAttr)){//判断options.validationAttr是否为空
fields.push($(this));
}
});
}
return fields;
}
//各元素需要校验的类型
function buildSingleFldVType(field) {
var valStr = field.attr(options.validationAttr);
var fldValidations=[];
var tempStr = '';
var openBrackets = 0;
for(var i = 0; i < valStr.length; i++) {
switch(valStr[i]) {
case ',':
if(openBrackets) {
tempStr += ',';
openBrackets--;
} else {
fldValidations.push(trim(tempStr));
tempStr = '';
}
break;
case '(':
tempStr += '(';
openBrackets++;
break;
case ')':
tempStr += ')';
fldValidations.push(trim(tempStr));
tempStr='';
break;
default:
tempStr += valStr[i];
}
if(valStr.length-1==i&&')'!=valStr[i]){//判断最后一个字符是不是')',是则不执行下面一行代码
fldValidations.push(tempStr);
}
}
return fldValidations;
}
function getVFunctionName(validation) {
if(validation.indexOf('(') != -1) {
return validation.substr(0, validation.indexOf('('));
} else {
return validation;
}
}
//去掉前后导空格
function trim(str) {
return str.replace(/^\s+/, '').replace(/\s+$/, '');
}
var options={};
options=$.fn.jStar.defaults;
})(jQuery);
$.fn.jStar.defaults = {
validationAttr: 'vtype', //需要校验的标识属性
warnAttr: 'warnText', //校验错误时提示的文本属性
errorMsgs: ''
};
$.fn.isValid=function(){
var vFlds = findValidateFields($(this)),
foucusFlag=0;
options.errorMsgs='';
var showErrorMsgsLengthFlag= 0,
flag=0;//控制显示输入错误的提示信息条数
$(vFlds).each(function(){
var fldValidations=buildSingleFldVType(this);
var errorMsg=buildErrorMsg(fldValidations,this);
if(errorMsg&&3==showErrorMsgsLengthFlag&&0==flag){ //这个判断需要放在showErrorMsgsLengthFlag自增前面
options.errorMsgs+='<li>··· ···</li>';
flag++;
}
if(errorMsg&&showErrorMsgsLengthFlag<3){
options.errorMsgs+=errorMsg;
showErrorMsgsLengthFlag++;
}
});
//????光标定位????i still dont know how......
var firstErrorMsg=options.errorMsgs.substring(0,options.errorMsgs.indexOf('<br/>'));
if(firstErrorMsg){
var obj = $('[warnText]',this);
for(var i=0;i<obj.length;i++){
var errorMsg=$(obj[i]).attr('warnText');
if(firstErrorMsg==errorMsg){
// showErrorMsgs();
obj[i].focus();
return false;
}
}
}
if(options.errorMsgs.length>0)return false;
else return true;
};
function buildErrorMsg(fldValidations, field) {
var errorMsg = '';
for(var i = 0; i < fldValidations.length; i++){
var funcName = getVFunctionName(fldValidations[i]);
var params = buildVParams(fldValidations[i]);
if(!eval('$.fn.jStar.validations["'+funcName+'"](field, field.val()'+params+')')) {
errorMsg+='<li>'+$(field).attr(options.warnAttr)+'</li>';
}
}
return errorMsg;
}
//拿到需要校验元素的校验类型的参数。eg: range(1,100)
function buildVParams(validation) {
if(validation.indexOf('(') != -1) {
var arr = validation.substring(validation.indexOf('(') + 1, validation.length - 1).split(',');
var tempStr = '';
for(var i = 0; i < arr.length; i++) {
var single = trim(arr[i]);
if(parseInt(single)) {
tempStr += ','+single;
} else {
tempStr += ',"'+single+'"'
}
}
return tempStr;
} else {
return '';
}
}
//找到所有需要校验的元素
function findValidateFields(form) {
var tags = 'input textarea select'.split(' ');
var fields = [];
for(var i = 0; i < tags.length; i++) {
form.find(tags[i]+'['+options.validationAttr+']').each(function() {
if($(this).attr(options.validationAttr)){//判断options.validationAttr是否为空
fields.push($(this));
}
});
}
return fields;
}
//各元素需要校验的类型
function buildSingleFldVType(field) {
var valStr = field.attr(options.validationAttr);
var fldValidations=[];
var tempStr = '';
var openBrackets = 0;
for(var i = 0; i < valStr.length; i++) {
switch(valStr[i]) {
case ',':
if(openBrackets) {
tempStr += ',';
openBrackets--;
} else {
fldValidations.push(trim(tempStr));
tempStr = '';
}
break;
case '(':
tempStr += '(';
openBrackets++;
break;
case ')':
tempStr += ')';
fldValidations.push(trim(tempStr));
tempStr='';
break;
default:
tempStr += valStr[i];
}
if(valStr.length-1==i&&')'!=valStr[i]){//判断最后一个字符是不是')',是则不执行下面一行代码
fldValidations.push(tempStr);
}
}
return fldValidations;
}
function getVFunctionName(validation) {
if(validation.indexOf('(') != -1) {
return validation.substr(0, validation.indexOf('('));
} else {
return validation;
}
}
//去掉前后导空格
function trim(str) {
return str.replace(/^\s+/, '').replace(/\s+$/, '');
}
var options={};
options=$.fn.jStar.defaults;
})(jQuery);
相关文章推荐
- 一个比较完善表单校验插件(续)----自以为算是比较全面的校验规则
- 一个简易的表单校验插件wv.js
- 根据jquery.validate.js写的一个通用的form表单校验插件
- JavaScript学习——完善注册页面表单校验
- 构建一个比较完善的监控系统 推荐
- EasyNVR无插件播放HLS/RTMP网页直播方案前端完善:监听表单变动
- 推荐ajaxfilemanager for tiny_mce 比较完善的tiny_mce编辑器的图片上传及图片管理插件PHP版 支持中文
- Js:消息弹出框、获取时间区间、时间格式、easyui datebox 自定义校验、表单数据转化json、控制两个日期不能只填一个
- PHP 一个比较完善的简单文件上传
- jQuery formValidator 表单校验插件4.1.1高仿网易邮箱注册页面(已发演示链接)
- 拥有一个属于自己的javascript表单验证插件
- EasyNVR无插件播放HLS/RTMP网页直播方案前端完善:监听表单变动
- 一款比较实用齐全的jQuery 表单验证插件
- jQuery formValidator4.0.1 表单校验插件更新日志(已提供下载)
- js校验表单插件
- 写的一个比较简单的会员登陆系统,具体功能在完善中,提点意见
- jQuery的表单校验插件validate
- jQuery form插件之formDdata参数校验表单及验证后提交
- 拥有一个属于自己的javascript表单验证插件
- [K/3Cloud] 创建一个业务单据表单插件