jquery验证未正确发布成功事件

时间:2014-05-30 14:46:19

标签: jquery jquery-validate

我正在使用jquery验证来验证注册表单上的字段。我使用远程方法来调用我的web服务来查找是否存在电子邮件地址。

如果电子邮件地址已经存在,则会正确显示“正在使用的电子邮件地址”消息,但如果该电子邮件不存在,则会在页面上将成功值(1)作为错误返回。

以下是我正在使用的代码:

JQUERY:

$("#register-form").validate({
        rules: {
                udemail: {
                    required: true,
                    email: true,
                    remote: {
                        url: "/services/VerifyUserAvailability.ashx",
                        type: "post",
                        complete: function (data) {
                            if (data.responseText == "1") {
                                //alert("Free");
                                return false;
                            }
                        }
                    }
                },
                ignore: ".ignore"

        },
        messages: {

             udemail: {
                 required: "Please enter your email address",
                 remote: "The email address has already been registered"
             }
        },
        onfocusout: function(element) {
            this.element(element);
        },
        errorPlacement: function(error, element) {
            if (element.attr("name") == "terms" ) {
                error.insertAfter("label.checkbox");
            } else {
                error.insertAfter(element);
            }
        },
        highlight: function(element) {
            $(element).parent().addClass("error");
        },
        unhighlight: function(element) {
            $(element).parent().removeClass("error");
        }
    });

HTML:

<input type="text" value="" class="required email" id="EmailAddress" name="udemail">

我只需要在返回值为1时不显示错误消息。

1 个答案:

答案 0 :(得分:0)

rules选项中有错误...

rules: {
    udemail: {
        // rules for 'udemail' 
    },
    ignore: ".ignore"  // <- incorrect placement
},

ignore选项不属于rules 中的。只有key:value对由字段名称和规则组成,属于rules

ignore选项是rules兄弟

rules: {
    // your rules
},
messages: {
    // your messages
},
ignore: ".ignore",  // <- goes here as a sibling of the other options
onfocusout: function(element) { .....

您正在错误地使用remote方法...

remote: {
    url: "/services/VerifyUserAvailability.ashx",
    type: "post",
    complete: function (data) {  // <- UNNECESSARY 
        if (data.responseText == "1") {
            //alert("Free");
            return false;
        }
    }
}

complete内部不需要带有布尔值的remote回调函数。 /services/VerifyUserAvailability.ashx上的服务器端功能应该给出一个&#34;响应&#34;如果字段通过验证,则echo的{​​true等)和false(或表示错误消息的JSON字符串)如果不通过。然后,插件会自动处理truefalse响应。

如果您的服务器端功能构造正确,这就是您所需要的......

remote: {
    url: "/services/VerifyUserAvailability.ashx",
    type: "post"
}

http://jqueryvalidation.org/remote-method/

  

serverside 资源通过jQuery.ajax(XMLHttpRequest)调用,并获取与已验证元素的名称对应的键/值对及其值作为GET参数。 响应评估为JSON,有效元素必须为true,无效元素可以是falseundefinednull,使用默认消息;或者一个字符串,例如。 "That name is already taken, try peter123 instead"显示为错误消息。

引用OP:

  

&#34;但是,如果电子邮件不存在,则会在页面上将成功值(1)作为错误返回。&#34;

这是因为它将1的服务器响应解释为字符串而不是true。来自服务器端响应的任何字符串都被视为&#34;失败&#34;验证和字符串本身成为错误消息。确保服务器端脚本的响应为true表示成功,false或JSON字符串表示失败。