这次更新做的几个调整:
1、修改了插件支持jQuery1.3.2类库,并修改了所有的demo
2、修正了在以往升级过程中由于疏漏产生的几个bug
3、补充了帮助文档。修正在升级过程中,有些功能忘记说明的问题
请大家仔细看demo1里的调用,因为1.3.2的选择器语法做了些调整,默认值设置也做了相应调整,具体语法我会在下次一次公布。
下载3.5版本
演示页面:
http://www.yhuan.com/formvalidator/demo1.htm
http://www.yhuan.com/formvalidator/demo4.htm
http://www.yhuan.com/formvalidator/demo5.htm
http://www.yhuan.com/formvalidator/demo6.htm
posted on 2009-03-03 23:41
猫冬 阅读(7591)
评论(158) 编辑 收藏
评论:
#59楼
2009-04-29 22:49 |
我想知道,如何设置可以默认不显示提示信息,你那onshow如果设为空就不能用了,请教 回复 引用
#60楼
2009-05-02 18:49 |
Email验证有BUG,输入dddddd@ddddddddd提示正确。大家看看是不是? 回复 引用
#61楼
2009-05-02 19:37 |
接60楼,我找了一条:
/\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/
用这个就没有那样的bug 回复 引用
#62楼
2009-05-04 11:10 |
--引用--------------------------------------------------
王剑双: ajaxValidator用POST 值传不过去,用get可以
.ajaxValidator({
type : "post",
data: 'Uname='+$("#Uname").val(),
url : "ajax_login.php",
datatype : "json",
success : function(data){
if( data == "1" )
{
return true;
}
else
{
return false;
}
},
我连GET都不行,只能传$("#xxx").formValidator xxx这个值,其他都没法传,麻烦作者给个多参数例子,谢谢了。。
--------------------------------------------------------
我.Net,POST也传不过去,但GET可以 回复 引用
#63楼
2009-05-04 15:25 |
data: "name="+$('#<%=this.txtUserName.ClientID %>').val(),
在后台用username=Request.Form["username"],取不到值呢???? 回复 引用
#64楼
2009-05-05 10:07 |
--引用--------------------------------------------------
testuser: 我想知道,如何设置可以默认不显示提示信息,你那onshow如果设为空就不能用了,请教
--------------------------------------------------------
onshow设为空就可以默认不自动显示信息,而是最后(提交)时验证弹出窗口。
$("#user_uid").formValidator({
/*onshow :"用户名不能为空",
onfocus :"至少4个至多20个字符",
oncorrect :"该用户名可以注册"*/
}).inputValidator({
min :4,
max :20,
empty :{
leftempty :false,
rightempty :false,
emptyerror :"密码两边不能有空白符号" // 直接回车会弹出两次!
},
onerror :"用户名不能为空,至少4个至多20个字符"
}); 回复 引用
#65楼
2009-05-05 10:09 |
--引用--------------------------------------------------
一号小马哥: data: "name="+$('#<%=this.txtUserName.ClientID %>').val(),
在后台用username=Request.Form["username"],取不到值呢????
--------------------------------------------------------
后台是ASP?
这样试试:
data: "name="+$('#' + '<%=this.txtUserName.ClientID' + ' %>').val(), 回复 引用
#66楼
2009-05-05 10:34 |
--引用--------------------------------------------------
王剑双: ajaxValidator用POST 值传不过去,用get可以
.ajaxValidator({
type : "post",
data: 'Uname='+$("#Uname").val(),
url : "ajax_login.php",
datatype : "json",
success : function(data){
if( data == "1" )
{
return true;
}
else
{
return false;
}
},
我连GET都不行,只能传$("#xxx").formValidator xxx这个值,其他都没法传,麻烦作者给个多参数例子,谢谢了。。
--------------------------------------------------------
1、默认是GET方式自动传值。如果你用POST取不到值,那应该是你后台ajax_login.php没写好。
2、datatype : "json", 返回值类型设定成JSON,那么下面判断返回值 “ data == "1" ”的写法就有问题。要么去掉 datatype项,要么修改后者为
if (data.state == "1" ) <----需要在服务器端输出时有 state:“1” 这个值对。 回复 引用
#67楼
2009-05-05 11:03 |
更正一下:
data参数只能是字符串或者变量形式,而不能是一个需要执行的命令,如
“data: 'Uname='+$("#Uname").val(), ” 中后段命令是不会执行的,所以只会传递“Uname”变量,而没有变量值。
另,无论是type是get或post,formValidator都是以url+值对的方式去提交ajaxValidator所绑定的ID极其值。 回复 引用
#69楼
2009-05-09 18:23 |
请教:发现在AJAX提交时会同时提交clientid=变量名,id=变量值,
但是我不明白的是后面还会跟着 "_"的变量,我不明白"_"(下划线)里
跟的一串数字是什么东西但是发现每次提交后都会变大
几次提交后得到如下:
_=1241862048687
_=1241862082250
_=1241862139781
_=1241862624265
_=1241862795921
我用的STURTS2框架老是提示有_未捕获我又不知什么用也不知道怎么去掉 回复 引用
#71楼
2009-05-11 10:48 |
请问,如何判断数据库中已经存在的注册用户和Email地址,在你这个插件中给如何添加? 回复 引用
#72楼
2009-05-12 12:23 |
1.Email验证
$("#email").formValidator({ onshow: "please input your email", onfocus: "please input your email", oncorrect: "OK" }).inputValidator({ min: 6, max: 100, onerror: "invaliad email" }).regexValidator({ regexp: /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/, onerror: "invalid email" });
这样就可以了
2.ajaxValidator中能设置错误信息为返回的错误码?
没找到办法 回复 引用 查看
#73楼
2009-05-12 13:41 |
@xzf888
这个和插件无关,是你自己写后台程序的。 回复 引用
#74楼
2009-05-12 14:07 |
@柯南
2、可以的,甚至显示返回错误信息的message都可以。
客户端:
.........xxxx.ajaxValidator({
type :"GET",
url :"admin.php?ajax=1",
success : function(data) {
// 0: user not exists,valid can be register; 1: user_name unvalid
if (1 == data) {
return false;
} else {
return true;
}
},
后台直接返回数值可以作判断。比如我上面例子是返回数字,如果返回1则用户已存在,验证不通过;返回0则该用户名可注册。
还可以返回json格式,这样可以根据错误代码显示出相应的msg。比如成功则不显示错误提示,而不成功则显示其对应的msg。后台返回值可以这样构造:
/*json return
state => 1:succ 2:error 3:failure*/
$code= array('state'=>2, 'msg'=>'error');
/* 如果查询成功,用户已存在)则修改
$code= array('state'=>1,'msg'=>'用户已存在’);
如果查询成功,用户名不存在,则
$code= array('state'=>0,'msg'=>'用户名可注册’); */
最后返回值时使用 echo json_encode($code); 命令。注意: json_encode()函数是PHP5.2以上才有,如果版本低可以用其他扩展。
在客户端用JS如此判断:
...xxx.ajaxValidator({
type :"GET",
datatype: 'json', //这儿得指定返回类型
url :"admin.php?ajax=1",
success : function(r) {
if (1 == r.state) { //1: user_name unvalid
alert(r.msg);
return false;
} else if (0 == r.state) { // 0: user not exists,valid can be register;
alert(r.msg);
return true;
} else { // 其他错误,比如DB错误。
alert(r.msg);
return false;
}
}, 回复 引用
#75楼
2009-05-13 08:53 |
@mark35
我指的是ajax传回的错误信息
但是这个插件好像一开始就设定好了错误,怎么改他的消息? 回复 引用 查看
#76楼
2009-05-13 11:01 |
猫东大侠,
请假一个问题:我用ajaxValid为什么我检查通过了,提交后同样内容检测通不过了?怎样修改为可以通过 回复 引用 查看
#77楼
2009-05-13 11:35 |
改了一下,ajaxValid实现动态提示,要有json Message返回
//ajax校验
ajaxValid: function(returnObj) {
var id = returnObj.id;
var srcjo = $("#" + id);
var elem = srcjo.get(0);
var settings = elem.settings;
var setting = settings[returnObj.ajax];
var ls_url = setting.url;
if (srcjo.size() == 0 && settings[0].empty) {
returnObj.setting = settings[0];
returnObj.isvalid = true;
$.formValidator.showMessage(returnObj);
setting.isvalid = true;
return;
}
if (setting.addidvalue) {
var parm = "clientid=" + id + "&" + id + "=" + encodeURIComponent(srcjo.val());
ls_url = ls_url + (ls_url.indexOf("?") > 0 ? ("&" + parm) : ("?" + parm));
}
$.ajax(
{
mode: "abort",
type: setting.type,
url: ls_url,
cache: setting.cache,
data: setting.data,
async: setting.async,
dataType: setting.datatype,
success: function(data) {
if (setting.success(data)) {
if (data.Message != null && data.Message != "")
setting.onerror = data.Message;
$.formValidator.setTipState(elem, "onCorrect", settings[0].oncorrect);
setting.isvalid = true;
}
else {
//conan77 conan77.vnblogs.com 修改 开始
if (data.Message != null && data.Message != "")
$.formValidator.setTipState(elem, "onError", data.Message);
else
$.formValidator.setTipState(elem, "onError", setting.onerror); //json返回的错误信息
//conan77.vnblogs.com 修改 结束
// $.formValidator.setTipState(elem, "onError", setting.onerror);
setting.isvalid = false;
}
},
complete: function() {
if (setting.buttons && setting.buttons.length > 0) { setting.buttons.attr({ "disabled": false }) };
setting.complete;
},
beforeSend: function(xhr) {
//再服务器没有返回数据之前,先回调提交按钮
if (setting.buttons && setting.buttons.length > 0) { setting.buttons.attr({ "disabled": true }) };
var isvalid = setting.beforesend(xhr);
if (isvalid) {
setting.isvalid = false; //如果前面ajax请求成功了,再次请求之前先当作错误处理
$.formValidator.setTipState(elem, "onLoad", settings[returnObj.ajax].onwait);
}
setting.lastValid = "-1";
return isvalid;
},
error: function() {
$.formValidator.setTipState(elem, "onError", setting.onerror);
setting.isvalid = false;
setting.error();
},
processData: setting.processdata
});
}, 回复 引用 查看
#78楼
2009-05-13 20:47 |
@柯南
________
兄弟这个排版太恐怖了~
重新排版,加上相应分号以便通过minify,源文件formValidator.js 440行开始:
success: function(data) {
if (setting.success(data)) {
if (data.Message != null && data.Message != "") {setting.onerror = data.Message;}
$.formValidator.setTipState(elem, "onCorrect",settings[0].oncorrect);
setting.isvalid = true;
} else { //conan77 conan77.vnblogs.com 修改 开始
if (data.Message != null && data.Message != "") {
$.formValidator.setTipState(elem, "onError", data.Message);
} else {
$.formValidator.setTipState(elem, "onError", setting.onerror);
}
setting.isvalid = false;
// json返回的错误信息 //conan77.vnblogs.com 修改 结束
}
},
尚未测试代码~ 回复 引用
#79楼
2009-05-14 11:50 |
@gz
插件代码本身问题,问题是Demo页面验证邮件代码那儿不是使用插件自带的正则,而是作者为了演示如何采用自定义正则而使用的一个正则。后者这个正则是有问题的。
使用插件自带正则的代码:
.regexValidator({
datatype:"enum",
regexp:"email",
onerror:"email格式不正确"
});
-------------
demo中自定义正则的代码:
.regexValidator({
regexp:"^([\\w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([\\w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$",
onerror:"你输入的邮箱格式不正确"
});
---------------
PS:建议作者的手册在排版上注意regexValidator的datatype和regexp关系。比如 userguide.html#7 这个文件中关于这两个属性排版上是相隔的,用户不一定马上能明白两者的关系:
datatype决定regexp——如果前者值为enum则后者就是插件内置正则规则名,如果前者值为string或者属性省略则后者值为自定义正则(字符串)。
建议手册排版上把两者相邻,并且在demo中datatype放在regexp前面。如此,便于用户看demo时根据顺序理解。 回复 引用
#80楼
2009-05-14 14:35 |
.ajaxValidator({
type : "post",
url : "Default.aspx?id=value&password1=password1&password2='"+$("#password2").val() +"'" ,
data: 'ufd='+$("#password1").val() ,
datatype : "json",
success : function(data){
if( data == "1" )
{
return true;
}
else
{
return false;
}
},
buttons: $("#button"),
error: function(){alert("服务器没有返回数据,可能服务器忙,请重试");},
onerror : "该用户名不可用,请更换用户名",
onwait : "正在对用户名进行合法性校验,请稍候..."
});
++++++++++++++++++++++++++++++++
string ls_user = Request.QueryString["test1"];
string dsf = Request.Params["test1"];
string sdff = Request.Form["test1"];
怎么都取不到值呢?? 回复 引用
#81楼
2009-05-14 14:37 |
ajaxValidator 同时给服务器端较验值,如何实现呢
麻烦那位大哥帮忙下,非常感谢。 回复 引用
#82楼
2009-05-14 14:37 |
ajaxValidator 同时给服务器端较验二个TextBox值,如何实现呢
麻烦那位大哥帮忙下,非常感谢。
回复 引用
#83楼
2009-05-14 14:44 |
Request.Params = {clientid=password1&clientid=test1&test1=maodong44&ALL_HTTP=HTTP_CACHE_CONTROL%3ano-cache%0d%0aHTTP_CONNECTION%3aKeep-Alive%0d%0aHTTP_CONTENT_LENGTH%3a0%0d%0aHTTP_ACCEPT%3aapplication%2fjson%2c+text%2fjavascript%2c+*%2f*%0d%0aHTTP_ACCEPT_ENCODING%3agzip%2c+...
+++++++++++++++++++++++++
还是不能同时把password1 和 test1 传过去,怎么解决呀?? 回复 引用
#84楼
2009-05-14 16:58 |
提个错误:
调用 pageIsValid() 的时候会会有这个错误:
行:367
错误: validobjectids 为空或不是对象
回复 引用 查看
#85楼
2009-05-14 18:51 |
@小笨蛋 #80
.ajaxValidator({
....
data: 'ufd='+$("#password1").val() ,
ajaxValidator函数不支持data值的表达式,只能是个字符串或者变量。这个只有等猫冬改进了。 回复 引用
#86楼
2009-05-14 19:54 |
2009-05-05 11:03 | mark35 [未注册用户]
更正一下:
data参数只能是字符串或者变量形式,而不能是一个需要执行的命令,如
“data: 'Uname='+$("#Uname").val(), ” 中后段命令是不会执行的,所以只会传递“Uname”变量,而没有变量值。
另,无论是type是get或post,formValidator都是以url+值对的方式去提交ajaxValidator所绑定的ID极其值
++++++++++++++++++++++++++++++++
正确的应该怎么写呢?? 我想在当前控件再传其它的控件值,比如说用户名和电子邮箱同时返回服务器端通验证,mark35 大哥,怎么写呢 回复 引用 查看
#87楼
2009-05-14 19:57 |
$("#account").formValidator({tipid:"accountTip",onfocus:"4-20个字符",oncorrect:"输入正确."}).inputValidator({min:4,max:20,onerror:"你输入的用户名非法,请确认"})
.ajaxValidator({
type : "post",
url : "Default.aspx?clientid=password1&password1='"+$("#password1").val() +"'",
这样传另一个控件值,也不行。。怎么办。。 回复 引用 查看
#88楼
2009-05-14 20:05 |
@mark35
控件值组合返回验证的需求常用啊。
郁闷。
账号与密码,
账号和邮箱,
等等,都需要复合验证。。。
猫冬哥哥加油,把这个功能改进下吧?谢谢了。 回复 引用 查看
#90楼
2009-05-15 12:14 |
bug?
formValidator.js #898行
processdata : false,
而手册中说明processdata 这个属性默认值是true 回复 引用
#91楼
2009-05-19 14:11 |
3.5的没有压缩版啊.我自已压缩都要11K.你3.3版的才6K,用什么工具压的呢. 回复 引用 查看
#93楼
2009-05-20 12:21 |
DateTimeMask.js 文件格式咋是UTF16LE(wBOM)? 回复 引用
#95楼
2009-05-26 17:39 |
.ajaxValidator({
type : "post",
url : "../Regulation.ashx?Type=AccountsInformation",
datatype : "json",
success : function(data)
{
debugger;
if( data == "1" )
{
return true;
}
else
{
return false;
}
},
----------------------------------------
我晕了,若是文本值不做变化或有焦点时,直接点击按钮,上面这段是没有办法执行的,mark35 大哥: 帮忙解决下,救急啊
在用户信息修改时,可能这些信息都有了,有可能一下子点击保存了呀,验证控件没有焦点时,也应该返回验证页判断下呀?? 回复 引用
#96楼
2009-05-29 01:32 |
@好孩子
刷新页面后直接提交时貌似插件并不做ajax验证而只是判断一个验证值(默认当然是false)
你说说你是什么具体应用。 回复 引用
#97楼
2009-05-29 17:07 |
@好孩子
ajax验证部分默认是blur失焦才验证,程序默认验证值isvalid==false。所以造成页面刷新后直接post提交时并未做ajax验证,于是肯定会提示ajax验证错误并终止表单提交。
如果修改源程序让表单提交时也作ajax提交验证,那么存在一个问题:程序默认ajax是异步验证,在失焦模式下是方便的但在表单提交时却不行,因为还没等你异步回来表单就已经去提交了。
所以如果要修改为表单提交时再作一次ajax验证则还要判断是表单提交(需要ajax同步)还是输入框验证提交(ajax可异步也可同步,一般使用前者)。
如果你是救急,那么可以临时改动源代码,让ajax验证默认是同步并且表单提交时也作一次ajax验证。然后等博主完善代码。 回复 引用
#99楼
2009-06-03 09:40 |
反馈几个formValidator的Bug
1.将onshow或onempty设置为空时,会导致onfocus、oncorrect、onerror等内容都无法显示。
2.对用户名做ajax验证是否已存在时,如果表单提交后再back回来,会一直提示这个用户已经被使用的错误。其实这个用户是不存在。刷新下页面或将用户名改成其他再改回来就又可以。 回复 引用 查看
#100楼
2009-06-03 10:34 |
@Leem
2.对用户名做ajax验证是否已存在时,如果表单提交后再back回来,会一直提示这个用户已经被使用的错误。其实这个用户是不存在。刷新下页面或将用户名改成其他再改回来就又可以。
------------------------------<<<<<<<<<<
其实你在刷新出页面直接提交的现象是一样的。那是因为提交时插件并未单独做ajax验证。 回复 引用
#101楼
2009-06-09 19:24 |
#96楼 123.145.178.* 2009-05-29 01:32 | mark35 [未注册用户]
@好孩子
刷新页面后直接提交时貌似插件并不做ajax验证而只是判断一个验证值(默认当然是false)
你说说你是什么具体应用。
+++++++++++++++++++++++++++++++++++
有二个业务应用。
用户信息新增及修改。
新增后时,表单提示出错了,按钮同样允许提交了,为何?
修改时,刷新一下,表单同样忽略了错误,晕。
请参见demo6.htm ,若把用户名清空了,刷新一下,它也说合法。
怎么办啊。 回复 引用 查看
#102楼
2009-06-09 19:35 |
mark35 大哥:
请测试一下demo6.htm 和demo1.htm 二表单中的用户名??
demo6页中,你把用户名清空下,同时把焦点放到其它控件上,再刷新一下页面,页面也提示所有的控件都正确?啊。。
demo1页中,用户名默认是maodong,这没错,但你把焦点放到用户名文本框,然后焦点离开该文本框,页面也提示用户名错误了,晕。这是正确的啊。ajax验证机制太乱了。。。。。 回复 引用 查看
#103楼
2009-06-09 20:42 |
mark35 [未注册用户]
ajax验证部分默认是blur失焦才验证,程序默认验证值isvalid==false。所以造成页面刷新后直接post提交时并未做ajax验证,于是肯定会提示ajax验证错误并终止表单提交。
如果修改源程序让表单提交时也作ajax提交验证,那么存在一个问题:程序默认ajax是异步验证,在失焦模式下是方便的但在表单提交时却不行,因为还没等你异步回来表单就已经去提交了。
所以如果要修改为表单提交时再作一次ajax验证则还要判断是表单提交(需要ajax同步)还是输入框验证提交(ajax可异步也可同步,一般使用前者)。
如果你是救急,那么可以临时改动源代码,让ajax验证默认是同步并且表单提交时也作一次ajax验证。然后等博主完善代码。
-------------------------
怎么改呢,郁闷,网站正准备发布呢,晕了。。m大哥抽时间帮救急下?
回复 引用 查看
#104楼
2009-06-09 21:02 |
mark35 [未注册用户]
刷新页面后,所有的控件不经验证都显示正确了,晕。。
回复 引用 查看
#105楼
2009-06-09 22:11 |
如何实现,页面载入时,就要进行ajax验证呢?? 回复 引用 查看
#106楼
2009-06-09 23:15 |
如果你是救急,那么可以临时改动源代码,让ajax验证默认是同步并且表单提交时也作一次ajax验证。然后等博主完善代码。
-------------------------
怎么改呢,郁闷,网站正准备发布呢,晕了。。m大哥抽时间帮救急下?
回复 引用 查看
#107楼
2009-06-15 14:07 |
@且行且思
老兄早点不回复。那天我都想好怎么临时改动一下适合你的要求,结果等了很久都没见你回复以为你已经解决了呢…… 回复 引用
#108楼
2009-06-15 14:23 |
1、注销 762行
$.formValidator.showAjaxMessage(returnObj);
2、找到 339 行如下内容:
if(settings[i].validatetype!="AjaxValidator") {
$.formValidator.triggerValidate(returnObj);
}else{
returnObj.ajax = i;
}
改成如下:
if(settings[i].validatetype!="AjaxValidator") {
$.formValidator.triggerValidate(returnObj);
}else{
returnObj.ajax = i;
returnObj.setting.async = false;
$.formValidator.showAjaxMessage(returnObj);
}
这样修改在直接提交表单时应该也可以ajax验证了。不过不便之处在于ajax验证对象blur时验证是“同步”会锁住浏览器,如果服务器响应时间长则客户端也会长时间锁住。估计博主也是如此考虑才做了当前的设置(post时不验证ajax)
本来打算完善一下ajax验证部分代码供博主参考,无奈这段时间很忙只大致考虑了一下代码流程。 回复 引用
#109楼
2009-06-15 14:27 |
@且行且思 #101楼
1、关于demo6中问题就是在于post时不进行ajax验证导致的(只在blur时才做ajax验证)
2、关于新增用户时出错,是不是新增界面中的元素并未绑定上验证插件?
回复 引用
#110楼
2009-06-15 14:44 |
PS:
关于Demo6清空 #text1 并刷新后验证默认通过,原因如此:查看源代码,在text1对象最后面还绑定了个参数 .defaultPassed(); 这意味着该对象默认值是“通过验证”(不仅仅ajax验证)。
当页面第一次打开时源代码是这样 <input type="text" id="test1" style="width:120px" value="maodong" />,自然 maodong是通过验证的(包括ajax),当你清空或者改动输入框值再刷新后,此时 text1 这个对象在DOM中的值变成“空”或者你改动的值,由于这个值也是元素的默认值(通过刷新得来)所以“依旧验证通过”。 至于为啥这个“默认值”既可以是源代码中值也可以是刷新后DOM中值,那就是浏览器的事了(FF刷新会保存原值,貌似IE不会) 回复 引用
#111楼
2009-06-15 14:49 |
更正:
那就是浏览器的事了(FF刷新会保存原值,貌似IE不会) --->
那就是浏览器的事了(FF3 F5刷新后值为刷新前“当前值”; FF3 Shift+F5/IE7 F5则为源代码值)
回复 引用
#112楼
2009-07-02 15:12 |
$(document).ready(function(){
var name = $("#UserName").val();
if (name != "")
{
$("#UserName").val(name);
$("#UserName").blur();
}
});
可以通过这个方法解决页面back回来时的ajax验证问题 回复 引用 查看
#113楼
2009-07-09 14:54 |
楼主可以留个Q或者msn账号吗,我想与你探讨下服务器端的验证。。 回复 引用 查看
#114楼
2009-07-09 23:39 |
请教楼主一个问题,我在使用autocomplete插件时,使用Ajax认证的时候,发现不论写入任何值,判断都是FALSE,如果去掉autocomplete直接手工输入值,则判断都是正确的,请问楼主如何解决这个问题,望赐教,谢谢!代码如下$("#hpid").formValidator({onshow:"请输入用户名",onfocus:"HPID至少3个字符,最多10个字符",oncorrect:"该HPID可以使用"}).inputValidator({min:3,max:10,onerror:"你输入HPID非法,请确认"}).regexValidator({regexp:"username",datatype:"enum",onerror:"HPID格式不正确"})
.ajaxValidator({
type : "get",
url : "testhpid4u.asp",
datatype : "json",
buttons: $("#button2"),
success : function(data){
alert("hpid=" + $("#hpid").val());
//alert("data=");
if( data == "1" )
{
return true;
}
else
{
return false;
}
},
error: function(){alert("服务器没有返回数据,可能服务器忙,请重试");},
onerror : "该HPID不可用,请更换HPID",
onwait : "正在对HPID进行合法性校验,请稍候..."
});
$("#hpid").autocomplete("searchhpid.asp", {
width: 140,
selectFirst: false,
matchContains: true,
formatItem: formatItem,
formatResult: function(data){
return data[1];
}
}); 回复 引用
#115楼
2009-07-13 00:28 |
我的网页是gb2312的,请问能调用utf-8的js吗 回复 引用
#116楼
2009-07-14 11:52 |
@115
可以的,不过如果是IE则可能会有兼容性问题。解决办法是js文件中不要有中文。
或者 <script type="text/javascript" src="youutf8.js" charset="UTF-8"></script> 回复 引用
#117楼
2009-07-23 15:05 |
在统计全角字符长度时,当输入的为全角字母或全角符号或全角空格等,对于这些在半角中有对应的符号存在的全角字符,没有做全角统计 回复 引用
#118楼
2009-07-24 15:54 |
关于使用ajaxValidator提交后,服务端得不到值的问题,
我在$.fn.ajaxValidator = function(controlOptions)
这个函数的settings里面,多加了一个
beforeAjaxValid: function() { return true; },
这样一来,在ajaxValid: function(returnObj) {的时候
在$.ajax之前,加入代码
if(setting.beforeAjaxValid !=undefined)
setting.beforeAjaxValid(setting);
就可以在提交之前,修改data值
然后在下面的
data: setting.data,
就可以获取到用户修改后的值了 回复 引用 查看
#119楼
2009-07-24 17:20 |
一直有个PageIsValid说不支持该属性...正在自己调试...不知道怎么搞的.用的jquery是1.3.2的,formValidator是3.3的 回复 引用
#120楼
2009-07-24 19:15 |
demo6 点击提交按钮 报"不允许用于访问路径“/formValidator3.5/demo6.htm”的 HTTP 谓词 POST。"的错误 回复 引用
#122楼
2009-07-27 14:18 |
毛哥你好,datePick的inputValidator里设置MAX值,也通过验证,不知道是我太菜,还是BUG,希望您能指导下
回复 引用
#123楼
2009-07-27 15:20 |
好了,把type改成value就好,是不是代码里有点小问题啊,希望大哥你看看 回复 引用
#124楼
2009-07-29 14:06 |
猫哥,一个小问题,如果我正确填写信息点击注册按钮到下一页后,然后back 用户名失去焦点后,直接进入onerror里,然后重新在输入用户名在清除用户名,在输入用户名就通过了,还请你能给讲解下,谢谢 回复 引用
#125楼
2009-07-29 14:10 |
back回来后没经过ajaxValidator,只有把用户名清除后,在输入一个新的用户名才能通过ajaxValidator 回复 引用
#127楼
2009-08-17 17:38 |
验证之前能不能先把input值trim下? 回复 引用
#128楼
2009-08-18 21:02 |
作者可能把代码放到GOOGLE CODE 里用SVN让合适的人在trunk里参与一起维护代码,当然是否采用由你决定.
希望加上可以在页面刚打开时的不进行自动验证。 回复 引用
#129楼
2009-08-29 17:15 |
发现一个问题,
就是如果提交事件的按钮,如果不在你的form标签内部的话
验证就不起作用
不知道这样的情况要怎么解决?? 回复 引用
#130楼
2009-09-11 00:07 |
楼上的哥们不再form表单类,你咋提交到后台? 回复 引用
#132楼
2009-09-21 11:59 |
请教:我想验证输入的是字符串或是汉字应该怎么判断呀?不能同时取formValidatorRegex.js 两个正则表达式么? 回复 引用
#133楼
2009-09-21 14:44 |
请教:现在发现一个问题,都是同一段代码。在ie浏览器里面就报错说:不支持此属性及方法;而在firefox浏览器里面就没有报错。会不会是和dwr有冲突呀?页面上用到了dwr可是应该怎么解决呢~~ 请教各位~~ 回复 引用
#134楼
2009-09-25 16:53 |
楼主,发现你对select控件的失去焦点的事件去触发了change事件,这样写使我们使用时出现了一些问题,然望楼主在新版本中能够改进,我们使用中修改你的方法如下:
else if (srcTag == "select") {
//获得焦点
jqobj.bind("focus", function() {
if (!initConfig.alertmessage) {
$.formValidator.setTipState(this, "onFocus", setting.onfocus);
}
});
//失去焦点
jqobj.bind("blur", function() {
var returnObj = $.formValidator.oneIsValid(this.id, 1);
if (returnObj == null) { return; }
if (returnObj.ajax >= 0) {
$.formValidator.showAjaxMessage(returnObj);
} else {
$.formValidator.showMessage(returnObj);
}
});
//选择项目后触发
jqobj.bind("change", function() {
var returnObj = $.formValidator.oneIsValid(this.id, 1);
if (returnObj == null) { return; }
if (returnObj.ajax >= 0) {
$.formValidator.showAjaxMessage(returnObj);
} else {
$.formValidator.showMessage(returnObj);
}
});
} 回复 引用
#135楼
2009-10-06 23:48 |
请问使用时间选择控件的时候,先让时间之前的input全部输入正确,然后到选择时间input的值时,不输入正确,直接清空,点提交按锯,这时候我发现 其他的INPUT就没见了,而显示的就只有一个时间,跟时间控件的窗口,请位各位有没有人谁遇到过,麻烦指点一下,也请博主能够花时间回复! 回复 引用 查看
#136楼
2009-10-29 18:17 |
@yanglu
程序本身有是否允许左/右/左右空白的设置。所以不会主动trim 回复 引用
#137楼
2009-10-29 18:18 |
页面打开时应该不会自动验证吧,除非失焦或者onchange
回复 引用
#138楼
2009-10-30 17:02 |
我想用ajax提交表单,用jQuery.form.js插件,代码:
$(document).ready(function(){
$.formValidator.initConfig({formid:"form1",onsuccess:function(){$("#submit").click(function(){
var options = {
url:"ok.php",
type:"POST",
target: "#myTargetDiv"
};
$("#form1").ajaxSubmit(options);
});return false;},onerror:function(msg){alert(msg)}});
可是要点两次提交,才能提交表单,没有建立http的连接。貌似第一次的时候click事件没有触发。怎样才能点一次就能触发click事件,那位高手指点一下? 回复 引用
#139楼
2009-11-02 19:02 |
@halo
程序会自动给form并定onsubmit事件
if(settings.formid!=""){$("#"+settings.formid).submit(function(){return $.formValidator.pageIsValid("1");})};
你这样写有问题:
你把 $("#submit").click(function(){}写在程序初始化的“onsuccess”中结果就是“每验证成功一次就会给submit按钮绑定一次(ajaxSubmit)事件”。先不论程序效率,直接问题是当第一次验证成功后submit按钮时才会绑定事件而不会有ajaxSubmit提交。第二次才是既提交又(重新)绑定。
这样写看看,直接给form绑定事件而不在submit按钮上绑定:
$(document).ready(function(){
$('#form1').submit(function() {
var options = {
url:"ok.php",
type:"POST",
target: "#myTargetDiv"
};
$(this).ajaxSubmit();
return false;
});
$.formValidator.initConfig({
formid:"form1",
onsuccess:function(){
return true;
},
onerror:function(msg){alert(msg)}
});
});
回复 引用
#140楼
2009-11-03 15:02 |
<script type="text/javascript">
$(document).ready(function(){
$.formValidator.initConfig({formid:"form1",onerror:function(msg){alert(msg)},onsuccess:function(){alert('ddd');return true;}});
$(":checkbox[name='strBase']").formValidator({tipid:"ckTip",onshow:"请选择维修内容(至少选一个)",onfocus:"你至少选择1个",oncorrect:"恭喜你,你选对了"}).inputValidator({min:2,onerror:"你选的个数不对"});
});
</script>
<body>
<form id="form1" runat="server" method="post">
<div>
<input type="checkbox" name="strBase" id="ck" value="1" runat="server" />
<input type="checkbox" name="strBase" id="ck1" value="2" />
<div id="ckTip"></div>
<asp:Button runat="server" ID="btnOK" Text="test" />
</div>
</form>
</body>
checkBox加了runat="server",验证控件就显示不出来了,不加runat=server就没问题,请问高手如何修改,或者如何在不加runat="server"情况下后台获得check的值。 回复 引用
#141楼
2009-11-05 19:59 |
@checkbox
这样
<input type="checkbox" name="strBase[]" id="ck" value="1" runat="server" />
<input type="checkbox" name="strBase[]" id="ck1" value="2" />
提交到后台读取 strBase[] 这个数组变量试试看(PHP肯定可以的)。注意绑定那儿的name也要修改
$(":checkbox[name='strBase[]']").formValidator({tipid:..... 回复 引用
#142楼
2009-11-06 21:15 |
首先感谢您开发的插件,使用之后让我们在项目中省去了很多繁琐、重复的工作,使用下来感觉良好
最近在开发一个系统的时候发现一个ajaxValidator的问题,我开发的是一个后台管理系统,经常有基本都是新增、修改、删除操作,
1、当我新增的时候通过插件去检验一个用户名是否存在是没有问题的;
2、但是当载入一个用户信息后修改其他信息点,一直显示是验证没有通过,然后用工具DEBUG发现根本没有发送ajax请求到服务器端,除非我去修改一下用户名才会触发验证动作,要不然离开焦点后就显示onerror设置的提示信息
最后用firebug调试发现判断到ajax验证直接路过了……
我从3.0版本开始使用一直都有这样问题,希望能够尽快解决
希望能及时回复,谢谢 回复 引用
#143楼
2009-11-09 15:47 |
@咖啡兔
ajax验证,值不变化则不做ajax验证。这个需要程序大改。 回复 引用
#144楼
2009-11-17 17:13 |
这是源码里关于ajaxValid的一段code
if(setting.addidvalue)
{
var parm = "clientid="+id+"&"+id+"="+encodeURIComponent(srcjo.val());
ls_url = ls_url + (ls_url.indexOf("?")>0?("&"+ parm) : ("?"+parm));
}
ajaxValid的时候是把id做为key做为表单的参数的。不过一般都是以name吧,我觉得要做成通用的,就最好不要改变一些约定的习惯.我做项目时用了你的东东,因为你的是现成的,我比较懒。我就改成还是以name为key的,如果控件没有name属性就以id为key 回复 引用 查看
#145楼
2009-11-17 17:18 |
忘了说句,谢谢啦,你的东东改起来后用还是很好用的。
顺便说下,那个强制验证的属性我在火狐下怎么不行,在ie下是可以的,不输入就会一直提示,但是在火狐下直接就失效了。 回复 引用 查看
#146楼
2009-11-17 17:59 |
可以直接把您提供的demo放在chrome下测试,发现在chrome下对checkbox和radio进行验证时失效。 回复 引用 查看
#147楼
2009-11-17 19:01 |
找到原因了
Safari and Chrome do not fire focus/blur events when the user uses the mouse to access checkboxes, radios or buttons. Text fields, textareas and select boxes work correctly. 回复 引用 查看
#148楼
2009-11-18 10:43 |
在插件的$.fn.formValidator里对srcTag == "input" || srcTag=="textarea"注册获得和失去焦点的事件时,对$.browser.safari || $.browser.chrome && type是checkbox或者radio情况下改变注册的事件,我的处理是用"mousedown"和"change"来代替 回复 引用
#149楼
2009-11-24 22:59 |
今天在用你的验证插件时发现一个问题,在textbox中按回车后就自动提交了.有没有方法不让form自动提交? 回复 引用
#150楼
2009-11-25 15:03 |
楼主,想问一下,很多案例,都要求 验证邮箱格式的同时,还要验证邮箱是否存在! 回复 引用
#151楼
2009-11-25 16:07 |
@且行且思
账号和邮箱的复合验证【既可以验证格式,又可以验证是否存在。注:稍微修改一下猫冬的代码】
$("#MemberEmail2").formValidator({onshow:"请输入邮箱",onfocus:"请输入有效邮箱,便于找回密码,邮箱6-100个字符。",oncorrect:"该邮箱可以使用!",defaultvalue:"@",forcevalid:false}).inputValidator({min:6,max:100,onerror:"您输入的邮箱长度不规范,请确认!"}).regexValidator({regexp:"^([\\w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([\\w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$",onerror:"您输入的邮箱格式不正确!"})
.ajaxValidator({
type : "get",
data:"username",
url : "YZMemberEmail.aspx",
datatype : "json",
success : function(data){
if( data == "1" )
{
return true;
}
else
{
return false;
}
},
buttons: $("#button"),
error: function(){alert("服务器没有返回数据,可能服务器忙,请重试!");},
onerror : "该用户名已存在,请更换用户名。",
onwait : "正在对用户名进行校验,请稍候..."
});//邮箱 回复 引用
#152楼
2009-11-30 17:59 |
楼主可否实现remove方法,就是可动态移除验证。 回复 引用
#153楼
2009-11-30 18:07 |
@Z.T(J)
帮大忙了,你的解决方案不错! 回复 引用
#154楼
2009-12-22 15:36 |
楼主
在你的API中
有这个方法$.formValidator.retSetTipState
但是我在你的源码中找不到相关的处理方法
是不是你遗漏掉了呢? 回复 引用
#155楼
2009-12-22 15:38 |
发现了
是你的帮助里面写错了
要改成
resetTipState 回复 引用
#156楼
2009-12-27 18:44 |
lz你好!我用发你的表单验证,现在问题是提交没有去验证我的表单 回复 引用 查看
#157楼
2010-01-13 12:36 |
ajaxValidator的逻辑还要改下,现在是每次focus一个元素的时候就保持一个旧值,然后如果每次调用验证的时候,如果文本框的值和旧值相等就不去调ajax。
这样当一个页面初始时是没问题的,可是一旦有以下2种情况,就会出现不会调用ajax而直接给出错误消息
1.如果开启了自动完成功能,表单提交的页面在回来后,会自动把以前的值填上,这样一开始focus进去,旧值(elem.validoldvalue)就是当前的元素的值,这样在showAjaxMessage里就不会调用后台,而默认的初始设置是让returnObj的valid为false的,所以会报错
2.比如让后台一开始就设置了值,前台初始化的时候要直接先把值显现,这样也会出现上面的问题
我现在是在focus的绑定里,把那个设置旧值的部分移到$.ajax的sucess方法的开始,这样就好了 回复 引用 查看
#158楼
2010-02-03 17:30 |
请问大家input type="file" 怎么校验啊! 回复 引用 查看