【发布时间】:2013-12-31 23:16:16
【问题描述】:
我看过这个question/answer,还有更多类似的,但我仍然无法让我的表单验证切换标签或移动到出现错误的标签。
相关的jQuery:
$(document).ready(function () {
$("form[name=modify]").validate({
ignore: [],
rules: {
first_name: {
required: true,
},
surname: {
required: true
},
id_number: {
required: true
},
mobile_number: {
number: true,
minlength: 10,
},
home_number: {
number: true,
minlength: 10,
},
other_contact: {
number: true,
minlength: 10,
},
line1: {
required: true,
},
city_town: {
required: true,
},
postal_code: {
required: true,
minlength: 4,
},
curr_renumeration: {
required: true,
number: true,
},
expect_renumeration: {
required: true,
number: true
},
email: {
email: true,
required: true,
},
highlight: function (label) {
$(label).closest('.control-group').addClass('has-error');
console.log($(label).closest('.control-group').addClass('has-error'));
if ($(".tab-content").find("div.tab-pane.active:has(div.has-error)").length == 0) {
$(".tab-content").find("div.tab-pane:hidden:has(div.has-error)").each(function (index, tab) {
var id = $(tab).attr("id");
$('a[href="#' + id + '"]').tab('show');
});
$('#myTab').on('shown', function (e) {
console.log(this);
e.target // activated tab
$($(e.target).attr('href')).find("div.has-error :input:first").focus();
});
}
},
}
});
$("[type=submit]").submit(function (e) {
e.preventDefault();
});
});
您可以查看here
我错过了什么?
有人可以帮我吗?我无法让它工作。
更新:
好的,所以我移动了一些代码并玩了一下:
$("form[name=modify]").validate({
highlight : function(label) {
$(label).closest('.form-group').addClass('has-error');
$(".tab-content").find("fieldset.tab-pane:has(has-error)").each(function(index, tab) {
alert("error from if");
if ($(".tab-content").find("field.tab-pane.active:has(has-error)").length == 0) {
alert("error from each");
var id = $(tab).attr("id");
console.log(id);
$('a[href="#' + id + '"]').tab('show');
}
});
},
invalidHandler : function(event, validator) {
// 'this' refers to the form
$('#myTab').on('shown', function(e) {
console.log(this);
e.target;// activated tab
$($(e.target).attr('href')).find("fieldset.has-error :input:first").focus();
});
var errors = validator.numberOfInvalids();
if (errors) {
var message = errors == 1 ? 'You missed 1 field. It has been highlighted' : 'You missed ' + errors + ' fields. They have been highlighted';
$("div.has-error span").html(message);
$("div.has-error").show();
} else {
$("div.has-error").hide();
}
},
ignore : [],
rules : {
first_name : {
required : true,
},
surname : {
required : true
},
id_number : {
required : true
},
mobile_number : {
number : true,
minlength : 10,
},
home_number : {
number : true,
minlength : 10,
},
other_contact : {
number : true,
minlength : 10,
},
line1 : {
required : true,
},
city_town : {
required : true,
},
postal_code : {
required : true,
minlength : 4,
},
curr_renumeration : {
required : true,
number : true,
},
expect_renumeration : {
required : true,
number : true
},
email : {
email : true,
required : true,
},
}
});
一切正常,除了停在这一行if ($(".tab-content").find("field.tab-pane.active:has(has-error)").length == 0) {
如果我用$(".tab-content").find("fieldset.tab-pane:has(has-error)").each(function(index, tab) { 交换它,它也会停止...
更新jsFiddle
为什么不进入 .each 或 thif ?
【问题讨论】:
标签: javascript jquery twitter-bootstrap tabs jquery-validate