フォームが 2 つのタブにまたがっており、含まれているタブにエラーのあるフィールドが含まれている場合、タブ ヘッダーを赤くしたいと考えています。
私はこれでかなりうまくいきました -->フィドル<--. フィールドに値を入力すると、赤いタブ ヘッダーがどのように消えるかがわかります。ただし、エラー検証がすぐに開始されるようにエントリを削除すると、タブは赤色に戻りません。
一見するとinvalid-form.validate
、間違ったイベントにフックしていない限り、エラー検証が2回スローされたときに関数はヒットしません。
私は文字通り、それをフックできるイベントを使い果たしています。どこに置くべきか考えていますか? :)
function mark_tab_header_error(form, element, is_error){
var id = $(form).find(element).closest('.tab-pane').attr('id');
$(form).find(element).closest('.tabbable').find('.tab_header').each(function(index, value){
if($(this).attr('href') == '#' + id){
if(is_error)
$(this).css({color: 'red'});
else
$(this).removeAttr('style');
}
});
}
$(document).ready(function () {
var validator = validation_rules('#myform');
validator.form();
function validation_rules(form) {
$.validator.addClassRules("fillone", {
require_from_group: [1, ".fillone"]
});
var validator = $(form).bind("invalid-form.validate",
function() {
if(validator.numberOfInvalids() > 0)
mark_tab_header_error(form, validator.lastElement, true);
}).validate({
errorPlacement: function (error, element) {
var field_error = $(form).find('#id_' + element.attr('name')).siblings('.field_error');
if (field_error.length > 0) {
error.appendTo(field_error);
}
$(field_error).show();
},
invalidHandler: function () {
$("#validation_summary").text(validator.numberOfInvalids() + " field(s) are invalid");
},
errorContainer: "#validation_summary",
success: function(){
mark_tab_header_error(form, validator.lastElement, false);
}
});
return validator;
}
});