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