昨天写一个验证器时遇到一个问题:传给验证函数的回调函数无法修改宿主(回调函数是宿主Vaildtor的成员方法)的属性(message),不报错,但就是修改没有效果;及其郁闷之下,去掉了那个属性(message),声明了个公共变量MSG,用来存放验证失败的消息。代码如下,不知各位高手有何高见,不要使用公共变量。
<!--
/*!
*验证器
*@author 胡海
*/
var MSG=[];
/*!
*验证任务
*@parm type 验证类型
*@param parameters 验证动作参数列表
*/
function Shedule(type,parameters)
{
this.type=type;
this.parameters=parameters;
}/*!
*任务类型
*@param type 验证类型
*@param action 验证动作
*/
function SheduleType(type,action)
{
this.type=type;
this.action=action;
}/*!验证器
*@param form 要验证的表单(jQuery包装过的对象)
*@param isShowMessageTogether(是否同时显示消息)
*/
function Vaildtor(form,isShowMessageTogether)
{
this.form=form;
this.sheduleList=[];
this.sheduleTypeList=[new SheduleType('EMPTY_VALUE',checkEmptyContent),new SheduleType("INVILD_EMAIL",checkInvildEmail)];
this.addMsg=function(msg)
{ var temp=this;
if(msg!=null && jQuery.trim(msg)!='')
{
MSG[MSG.length]=msg;
}
};
this.showMsg=function()
{
var msg='';
for(var i=0;i<MSG.length;i++)
if(isShowMessageTogether)
msg+=MSG[i]+'\n';
else
alert(MSG[i]);
if(isShowMessageTogether)
alert(msg);
};
this.doShedule=function(shedule)
{
for(var i=0;i<this.sheduleTypeList.length;i++)
if(shedule.type=this.sheduleTypeList[i].type)
{
return this.sheduleTypeList[i].action(shedule.parameters,this.addMsg);
}
};
}
/*!
*获取任务类型列表
*/
Vaildtor.prototype.getSheduleTypeList=function()
{
return this.sheduleTypeList;
};
/*!
*添加任务类型
*@param type 验证类型
*@param action 任务动作
*/
Vaildtor.prototype.addSheduleType=function(type,action)
{
this.sheduleTypeList[this.sheduleType.length]=new SheduleType(type,action);
}
/*!
*添加任务
*@param type 验证类型
*@parm params 验证动作参数列表
*/
Vaildtor.prototype.addShedule=function(type,params)
{
this.sheduleList[this.sheduleList.length]=new Shedule(type,params);
};
/*!
*部署验证
*/
Vaildtor.prototype.deployVaildShedule=function()
{
var temp=this;
this.form.submit(
function(event)
{
MSG=[];
var flag=true;
for(var i=0;i<temp.sheduleList.length;i++)
{
flag=flag & temp.doShedule(temp.sheduleList[i]);
}
if(flag==false)
{
temp.showMsg();
event.preventDefault();
}
}
);
};
/*!
*空值检查
*@param input 要检查的输入控件 (jQuery包装过的对象)
*@param message 内容为空时的提示信息
*@param isFilterPragraphTag 是否过滤段落标记
*@param isFilterBlank 是否过滤空格
*@param callback 回调函数
*/
checkEmptyContent=function(params,callback)
{
input=params.input;
message=params.message;
isFilterPragraphTag=params.isFilterPragraphTag;
isFilterBlank=params.isFilterBlank;
if(input.val()!='')
{
var noWarpContent=input.val();
if(isFilterPragraphTag)//过滤段落标记
{
//过滤<p>标记
while(noWarpContent.indexOf('<p>')>=0)
noWarpContent=noWarpContent.replace('<p>','');
//过滤</p>标记
while(noWarpContent.indexOf('</p>')>=0)
noWarpContent=noWarpContent.replace('</p>','');
}
if(isFilterBlank)//过滤空格
{
//过滤空格标记
while(noWarpContent.indexOf(' ')>=0)
noWarpContent=noWarpContent.replace(' ','');
while(noWarpContent.indexOf(' ')>=0)
noWarpContent=noWarpContent.replace(' ','');
//过滤空格
noWarpContent=$.trim(noWarpContent);
}
if($.trim(noWarpContent)!='')
{
return true;
}
}
callback(message);
return false;
};
/*!
*检查邮件地址有效性
*/
checkInvildEmail=function(params,callback)
{}
//-->
<!--
/*!
*验证器
*@author 胡海
*/
var MSG=[];
/*!
*验证任务
*@parm type 验证类型
*@param parameters 验证动作参数列表
*/
function Shedule(type,parameters)
{
this.type=type;
this.parameters=parameters;
}/*!
*任务类型
*@param type 验证类型
*@param action 验证动作
*/
function SheduleType(type,action)
{
this.type=type;
this.action=action;
}/*!验证器
*@param form 要验证的表单(jQuery包装过的对象)
*@param isShowMessageTogether(是否同时显示消息)
*/
function Vaildtor(form,isShowMessageTogether)
{
this.form=form;
this.sheduleList=[];
this.sheduleTypeList=[new SheduleType('EMPTY_VALUE',checkEmptyContent),new SheduleType("INVILD_EMAIL",checkInvildEmail)];
this.addMsg=function(msg)
{ var temp=this;
if(msg!=null && jQuery.trim(msg)!='')
{
MSG[MSG.length]=msg;
}
};
this.showMsg=function()
{
var msg='';
for(var i=0;i<MSG.length;i++)
if(isShowMessageTogether)
msg+=MSG[i]+'\n';
else
alert(MSG[i]);
if(isShowMessageTogether)
alert(msg);
};
this.doShedule=function(shedule)
{
for(var i=0;i<this.sheduleTypeList.length;i++)
if(shedule.type=this.sheduleTypeList[i].type)
{
return this.sheduleTypeList[i].action(shedule.parameters,this.addMsg);
}
};
}
/*!
*获取任务类型列表
*/
Vaildtor.prototype.getSheduleTypeList=function()
{
return this.sheduleTypeList;
};
/*!
*添加任务类型
*@param type 验证类型
*@param action 任务动作
*/
Vaildtor.prototype.addSheduleType=function(type,action)
{
this.sheduleTypeList[this.sheduleType.length]=new SheduleType(type,action);
}
/*!
*添加任务
*@param type 验证类型
*@parm params 验证动作参数列表
*/
Vaildtor.prototype.addShedule=function(type,params)
{
this.sheduleList[this.sheduleList.length]=new Shedule(type,params);
};
/*!
*部署验证
*/
Vaildtor.prototype.deployVaildShedule=function()
{
var temp=this;
this.form.submit(
function(event)
{
MSG=[];
var flag=true;
for(var i=0;i<temp.sheduleList.length;i++)
{
flag=flag & temp.doShedule(temp.sheduleList[i]);
}
if(flag==false)
{
temp.showMsg();
event.preventDefault();
}
}
);
};
/*!
*空值检查
*@param input 要检查的输入控件 (jQuery包装过的对象)
*@param message 内容为空时的提示信息
*@param isFilterPragraphTag 是否过滤段落标记
*@param isFilterBlank 是否过滤空格
*@param callback 回调函数
*/
checkEmptyContent=function(params,callback)
{
input=params.input;
message=params.message;
isFilterPragraphTag=params.isFilterPragraphTag;
isFilterBlank=params.isFilterBlank;
if(input.val()!='')
{
var noWarpContent=input.val();
if(isFilterPragraphTag)//过滤段落标记
{
//过滤<p>标记
while(noWarpContent.indexOf('<p>')>=0)
noWarpContent=noWarpContent.replace('<p>','');
//过滤</p>标记
while(noWarpContent.indexOf('</p>')>=0)
noWarpContent=noWarpContent.replace('</p>','');
}
if(isFilterBlank)//过滤空格
{
//过滤空格标记
while(noWarpContent.indexOf(' ')>=0)
noWarpContent=noWarpContent.replace(' ','');
while(noWarpContent.indexOf(' ')>=0)
noWarpContent=noWarpContent.replace(' ','');
//过滤空格
noWarpContent=$.trim(noWarpContent);
}
if($.trim(noWarpContent)!='')
{
return true;
}
}
callback(message);
return false;
};
/*!
*检查邮件地址有效性
*/
checkInvildEmail=function(params,callback)
{}
//-->
解决方案 »
- 关于ext4比较麻烦的样式问题,怎么解决
- "小方块怎么用正则去掉"?
- 谁有javascript的编辑工具,要最强的,有提示,有调试,而且是中文的,有的给我个
- 这段代码是javascript代码吗?
- 请教一个JS的问题
- 如何在设定optionname.options[optionname.length]=new Option("name","value")时让其被选择?
- javascript 语法请问:
- 100分求救,在线等待!
- <iframe>和<frame>有什么区别?为什么大家喜欢用iframe?
- ajax传递json数据出现400错误
- js代码 IE提示缺少标识符 ff提示函数changeTableStyle is not defined (没有定义)
- 请教Jquery问题
2.添加验证任务
3.部署验证任务示例调用代码如下:
<script type="text/javascript">
var vaildtor=new Vaildtor($('form.replyTopic'),true);
vaildtor.addShedule('EMPTY_VALUE',
{
input:$('#content'),
message:'回复内容不可以为空!',
isFilterPragraphTag:true,
isFilterBlank:true
}
);
vaildtor.deployVaildShedule();
</script>