注册时检测用户是否已存在(自定义验证控件+jQuery.Ajax)

44 篇文章 0 订阅
22 篇文章 0 订阅

注册时检测用户是否已存在(自定义验证控件+jQuery.Ajax)

本想在自定义验证控件(asp:CustomValidator)的客户端验证属性里(ClientValidationFunction)来写ajax访问的,若存在则让它的arguments.IsValid=!用户存在,但无奈ajax是异步调用,等不到它调用ClientValidationFunction的javascript函数已经执行完毕,所以此路跟本行不通。那就只能用一个全局javascript变量user_exist来存用户是否存在的信息,ajax调用完成给它赋值,在注册按钮按下时判断。只能如此了……

  1. <script type="text/javascript" language="javascript" src="scripts/jQuery/jquery-1.2.6-vsdoc.js"></script>
  2. <script type="text/javascript" language="javascript">
  3. <!--
  4. var user_is_exist = true;//全局变量,用户是否存在
  5. function UserExistValidate(source, arguments) {
  6.     var username = jQuery.trim(arguments.Value);
  7.     
  8.     //验证1,必需有
  9.     if (username.length == 0) {
  10.     arguments.IsValid = false;//验证不通过
  11.     return;
  12.     }
  13.     
  14.     //验证2,以字母开头且只包含大小写字母和下划线            
  15.     //var reg_user = new RegExp("[a-zA-Z]{1}[a-zA-Z0-9//_]{2,14}");
  16.     var reg_user = /^[a-zA-Z]{1}[a-zA-Z0-9//_]{2,14}$/;
  17.     if (!reg_user.test(username)) {
  18.     //alert("用户名不符合规范");
  19.     arguments.IsValid = false;//验证不通过
  20.     return;
  21.     }
  22.     
  23.     //验证3,在数据库中尚未注册过的
  24.     jQuery.ajax({
  25.     type: "GET",
  26.     url: "F_Checker.aspx",
  27.     data: "u=" + username,
  28.     success: function(msg) {
  29.         if (msg == "T") {
  30.         user_is_exist = true;
  31.         jQuery("#span_user_exist").css("color""#f00");
  32.         jQuery("#span_user_exist").text("该用户名已经被占用.");
  33.         }
  34.         else if (msg == "F") {
  35.         user_is_exist = false;
  36.         jQuery("#span_user_exist").css("color""#0f0");
  37.         jQuery("#span_user_exist").text("用户名尚未被使用.");
  38.         }
  39.         arguments.IsValid = !user_is_exist; //跟本就没用(验证通过与否)
  40.     }//,
  41.     //async: false //同步也没用
  42.     });
  43. }
  44. function checkUserExist() {
  45.     if (user_is_exist) {
  46.     alert("用户名已经被占用,不能注册!");
  47.     return false;
  48.     }
  49.     return true;
  50. }
  51. // -->
  52. </script>
  53. <asp:TextBox ID="txt_username" runat="server" ValidationGroup="reg"></asp:TextBox>
  54. <asp:CustomValidator ID="cv_user_exist" runat="server" ControlToValidate="txt_username"
  55. ErrorMessage="用户帐号必需以字母开头且3位以上" ValidationGroup="reg" 
  56. ClientValidationFunction="UserExistValidate" Display="Dynamic" 
  57. ValidateEmptyText="True" Font-Size="10"></asp:CustomValidator>
  58. <span id="span_user_exist"></span>
  59. <asp:Button ID="btn_register" runat="server" Text="注册" ValidationGroup="reg" 
  60. onclientclick="return checkUserExist();"  />

 

F_Checker.aspx页面访问数据库,只返回“T”或“F”。

 

效果:

 

 

 

2009-01-13补:

呵呵,我知道了,用同步的方法来:

  1. //验证3,在数据库中尚未注册过的
  2. var result_text=  //这样就OK-1
  3. jQuery.ajax({
  4. type: "GET",
  5. url: "F_Checker.aspx",
  6. data: "u=" + username,
  7. success: function(msg) {
  8.     if (msg == "T") {
  9.     user_is_exist = true;
  10.     jQuery("#span_user_exist").css("color", "#f00");
  11.     jQuery("#span_user_exist").text("该用户名已经被占用.");
  12.     }
  13.     else if (msg == "F") {
  14.     user_is_exist = false;
  15.     jQuery("#span_user_exist").css("color", "#0f0");
  16.     jQuery("#span_user_exist").text("用户名尚未被使用.");
  17.     }    
  18. },
  19. async : false        //这样就OK-2
  20. }).responseText; //这样就OK-3
  21. //alert(result_text);
  22. if(result_text=="T")
  23. arguments.IsValid = false; //验证不通过

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值