0
我想要一個驗證方法,它將檢查兩個字段是否相等,然後隱藏其中一個。此刻我用equalTo來檢查它們是否相等。所以我計劃添加一個驗證方法,該方法委託給equalTo並根據結果隱藏字段。Jquery驗證:從自定義驗證方法調用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,如果可能的話。
謝謝,這會奏效。不過,如果可能的話,我寧願使用真正的equalTo函數,而不是分叉它。這樣,當驗證插件升級時,我將獲得任何改進的好處。由於equalTo函數中有一個TODO,我認爲這很可能發生。 –
@MarkChorley,這是你最好的選擇。我已經回答了數百個有關jQuery Validate插件的SO問題,並閱讀了數百篇。我從來沒有看到你這樣做,因爲這是不可能的。 – Sparky
感謝您的幫助。可以像這樣調用一個jQuery Validate方法,因爲當我得到錯誤時我正在這樣做。唯一的問題是解決設置引用:是不是在equalTo中存在,那麼我的代碼將工作。看到這個問題的一個類似的例子:http://stackoverflow.com/questions/7392875/custom-validation-for-jquery-validate-two-method-in-one/7392947#7392947和這一個一些信息的實例驗證器:http://stackoverflow.com/questions/1510165/how-can-i-add-remove-or-swap-jquery-validation-rules-from-a-page –