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 –