Meteor:jQueryValidation远程使用javascript函数

时间:2014-02-04 05:23:38

标签: javascript jquery-validate meteor

我正在尝试使用jQueryValidation:remote for meteor javascript函数来验证注册表单上的电子邮件。

Javascript验证:

$("#register-form").validate({
    rules: {
        email: {
            required: true,
            email: true,
            // remote: don't know what to do
        }
    },
    messages: {
        email: {
            required: "Please enter your email",
            remote: "Please enter another one. This email is already exist"
        },
    }
    //...
});

流星功能:

Template.tmp_signup.events({
    'change #inpSignupEmail': function () {
        if (typeof console !== 'undefined') {
            var data = document.getElementById("inpSignupEmail").value;
            var findOut = UserCustomer.find({Email: data});
            if (findOut.fetch().length > 0) {
                console.log("this email is already exist. too bad");
            }
            else {
                console.log("this is a new email!");
            }
        }
    },  
}

到目前为止,我的'change #inpSignupEmail'功能正常,但当然,我得到的只是一个控制台日志:“这封电子邮件已经存在。太糟糕了。”

是否可以将我的javascript函数用于jQueryValidation:remote?

谢谢。

2 个答案:

答案 0 :(得分:0)

您不能将remote与JavaScript一起使用,因为remote用于远程检查服务器上的内容并阅读回复。

相反,您必须使用the plugin's addMethod() method编写包含其他JavaScript的规则。

像这样的东西,虽然我假设你的流星功能已经正常工作......

jQuery.validator.addMethod("myMeteor", function(value, element) {
    Template.tmp_signup.events({
        'change #inpSignupEmail': function () {
            if (typeof console !== 'undefined') {
                var data = value;  // 'value' argument represents the value of your input
                var findOut = UserCustomer.find({Email: data});
                if (findOut.fetch().length > 0) {
                    return false;  // fails - display error
                }
                else {
                    return true;  // passes - no message
                }
            }
        }
    }  
}, "this email is already exist. too bad");

.validate() ...

中宣布
$("#register-form").validate({
    rules: {
        email: {
            required: true,
            email: true,
            myMeteor: true
        }
    }, ......

答案 1 :(得分:0)

在弄乱了@Sparky使用addMethod()的答案后,我发现这个代码片段在我的案例中运行得很漂亮:

jQuery.validator.addMethod("myMeteor", function (value, element) {
    if (typeof console !== 'undefined') {
        var data = value;  // 'value' argument represents the value of your input
        var findOut = UserCustomer.find({Email: data});
        if (findOut.count() > 0) {
            return false;  // fails - display error    
        }
        else {
            return true;  // passes - no message
        }
    }
});

P.S。:感谢@Sparky的想法。