我有两个共享标签的元素。
我需要在它上面添加/删除一个CSS类,因为这两个元素正在被验证。如果其中一个或两个都无效 - 标签需要变为红色。如果两者都有效 - 标签被标记为有效。
无法在不进入无限循环的情况下弄清楚如何做到这一点,其中一个元素触发另一个元素的验证,这反过来触发第一个元素,等等。我现在只能想到使用高亮/ unhighlight方法。
编辑:这是一个jsfiddle。
$("#my-profile-form").validate({
errorContainer: "#errorProfile",
highlight: function(el, errorClass, validClass) {
var $el = $(el);
if($el.attr('name') == 'state'){
$el.addClass(errorClass).removeClass(validClass);
$el.parents('fieldset').addClass('error');
} else if ($el.attr('name') == 'zip') {
$el.addClass(errorClass).removeClass(validClass);
} else {
$el.parents('fieldset').addClass(errorClass);
}
},
unhighlight: function(el, errorClass, validClass) {
var $el = $(el);
if($el.attr('name') == 'state'){
$el.removeClass(errorClass).addClass(validClass);
} else if($el.attr('name') == 'zip') {
$el.removeClass(errorClass).addClass(validClass);
} else {
$el.parents('fieldset').removeClass(errorClass);
}
},
errorPlacement: function(error,element) {
return true;
},
ignore: "", // needed to validate drop-downs in IE
rules: {
zip: {
postalcode: true,
required: true
}
},
messages: {
zip: {
postalcode: " Please specify a valid zip code.",
required: " The zip field is required."
}
}
});
答案 0 :(得分:1)
怎么样
...
if($el.attr('name') == 'state' || $el.attr('name') == 'zip'){
$el.addClass(errorClass).removeClass(validClass);
$el.siblings('label:not([generated])').AddErrorClassIfNotAlreadyPresent();
}
...
答案 1 :(得分:0)
结束时不使用验证器来解决问题。我为这两个元素附加了一个“更改”处理程序,并在那里完成所有工作。
var v_profile = $("#my-profile-form").data('validator');
$("select.state, input.zip").on('change', { errorClass: v_profile.settings.errorClass, validClass: v_profile.settings.validClass }, function(ev){
var validator = $(this).parents('form').data('validator');
var res1 = validator.element( "select.state" );
var res2 = validator.element( "input.zip" );
if(res1 && res2){
$(this).parents('fieldset').addClass(ev.data.validClass).removeClass(ev.data.errorClass);
} else {
$(this).parents('fieldset').addClass(ev.data.errorClass).removeClass(ev.data.validClass);
}
});