使用JQuery Validation Plugin,我想更改远程验证方法

时间:2009-09-16 13:57:01

标签: jquery jquery-validate

我正在使用jquery validate插件来使用此插件的远程方法针对数据库验证电子邮件地址。

我需要检查电子邮件地址是否已经在我们的数据库中。最初,脚本与服务器端代码组合只是检查我们数据库中的电子邮件地址并返回true或false,这成功。

我现在需要添加一个额外的功能,因为现在我们可以在数据库中拥有相同的电子邮件地址,只要记录的siteid不同,即fred@bloggs.com的记录与siteid = site1存在于数据库中,您无法再次使用siteid = site1添加fred@bloggs.com,但可以使用siteid = site2添加fred@bloggs.com。

我已确认服务器端代码正在运行,对于给定的电子邮件地址和siteid,它会按预期返回true或false。

我想在更改siteid选择框时重新验证电子邮件字段。目前它似乎记得它以前的验证(它已经在加载时已经验证)并且不受siteid更改的影响,除非我将电子邮件从fred@bloggs.com更改为其他内容,然后将其更改回来,然后它正确验证对于新的siteid。我尝试过删除规则和添加规则的组合,似乎没有任何效果。

帮助!

<html>
<head>
<script type="text/javascript">
$(document).ready(function () {
    var enquiryform = {
        rules: {
       email: {
           required: true,
      email: true,
      remote: 'emailcheck2.asp?siteid=' + $('#siteid').val()
       }        
   },
   messages: {
            email: {
           remote: 'exists already!'
       }
        }           
    };

    var validatedform = $(".validatedform").validate(enquiryform).form();       
    $("#siteid").bind("change", function(e){
        enquiryform.rules.email.remote='emailcheck2.asp?siteid=' + $('#siteid').val();
    });
});
</script>
</head>
<body class="contactadd">
</head>
<body>
<form method="Post" class="validatedform">
<input class="email" id="email" name="email" type="text">
<select id="siteid" name="siteid">
<option value="1">Site 1</option>
<option value="2">Site 2</option>
</select>
<input id="submitbutton" type="submit" value="Create">
</form>
</body>
</html>

3 个答案:

答案 0 :(得分:10)

该插件会出于性能原因缓存该值。作为现在的解决方法,只要依赖值发生更改,您就可以尝试手动使缓存无效:

$("#site").change(function() {
  $("#email").removeData("previousValue");
});

答案 1 :(得分:1)

据我所知,这可能是验证插件的限制。在 http://docs.jquery.com/Plugins/Validation/validate#toptions给出了几个触发验证的选项(这是你想要做的),但我没有看到在另一个元素发生变化时触发一个元素验证的方法。

您最好的办法是将验证码放在以下内容中:

$('select#siteid').onChange(function(){
        $('form.validatedform').validate({ 
                 rules:{
                       email: {
                              required: true,
                              email: true,
                              remote: 'emailcheck2.asp?siteid=' + $('#siteid').val()
                       }
                  }
         });
  });

答案 2 :(得分:1)

嗨,如果你使用这个jquery验证插件, http://docs.jquery.com/Plugins/Validation/validate

如果要发送其他参数(例如站点ID)进行远程验证,可以执行以下操作:

var enquiryform = {
        rules: {
            email: {
                required: true,
                email: true,
                remote: {
                    url: "emailcheck2.asp", //this should be the full path url including base url
                    data: {
                        siteid: function() {
                            return $('#siteid').val();
                        }
                    }
                }
            }
        }
    };