Jquery验证:从自定义验证方法调用equalTo方法

时间:2013-06-05 11:32:02

标签: jquery-validate

我想要一个验证方法,它会检查两个字段是否相等然后隐藏其中一个。目前我使用equalTo来检查它们是否相等。所以我计划添加一个验证方法,该方法委托给equalTo并根据结果隐藏字段。

我遇到的问题是我无法弄清楚如何在验证器的正确实例上调用equalTo。当我调用它时,我总是看到一个等于错误的错误,“this.settings未定义”。这是相等的

 // http://docs.jquery.com/Plugins/Validation/Methods/equalTo
        equalTo: function( value, element, param ) {
            // bind to the blur event of the target in order to revalidate whenever the target field is updated
            // TODO find a way to bind the event just once, avoiding the unbind-rebind overhead
            var target = $(param);
//error here   
            if ( this.settings.onfocusout ) {
                    target.unbind(".validate-equalTo").bind("blur.validate-equalTo", function() {
                        $(element).valid();
                    });
                }
                return value === target.val();
        },

这是我的代码。

// validate form
$.validator.addMethod("equalToAndHide", function(value, element, param) {
   //this does not work
   var result = $.validator.methods.equalTo.call(value, element, param);
   if(result === true){
        $(element).hide();
   }
   return result; 
 }, $.validator.format("Values must be equal_???"));

 $('form').validate({
                        rules : {

                        confirmEmail : {
                            equalToAndHide : utils.byId("alternateEmail")
                        }
                    },
                    submitHandler : function(form) {
                        accordionAjax.post($(form));
                    }
                });

如果可能的话,我宁愿保留equalTo而不是覆盖它并修改对this.settings的调用。

1 个答案:

答案 0 :(得分:2)

您无需在自定义方法中调用原始equalTo ...只需使用原始作为基础编写一个全新的函数。

这是默认的equalTo功能...

function( value, element, param ) {
    var target = $(param);
    if ( this.settings.onfocusout ) {
        target.unbind(".validate-equalTo").bind("blur.validate-equalTo", function() {
            $(element).valid();
        });
    }
    return value === target.val();
}

将其放入您的自定义方法中并进行调整以满足您的需求......

$.validator.addMethod("equalToAndHide", function(value, element, param) {
        var target = $(param);
        if ( this.settings.onfocusout ) {
            target.unbind(".validate-equalTo").bind("blur.validate-equalTo", function() {
                $(element).valid();
            });
        }
        return value === target.val();
        $('#whatever').hide();
}, $.validator.format("Values must be equal_???"));