0

2 つのフィールドが等しいことを確認し、そのうちの 1 つを非表示にする検証方法が必要です。現時点では、 equalTo を使用してそれらが等しいことを確認しています。そのため、 equalTo に委任し、結果に応じてフィールドを非表示にする検証メソッドを追加することを計画しました。

私が抱えている問題は、バリデーターの正しいインスタンスで equalTo を呼び出す方法がわからないことです。それを呼び出すと、equalTo に「this.settings が定義されていません」というエラーが常に表示されます。これはequalToです

 // 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 への呼び出しを修正するよりも、そのままにしておくことをお勧めします。

4

1 に答える 1

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_???"));
于 2013-06-05T13:53:26.063 に答える