我有一个带有Tabs的表单,并且有一个简单的函数用于在用户在它们之间移动时验证表单选项卡。 (使用jQuery,引导和jquery.validate)jQuery Validation,提交时显示有效/无效表单选项卡
标签验证功能
var validateTab = function(element) {
var _element = $(element);
var validatePane = _element.attr('data-target');
var isValid = $(validatePane + ' :input').valid();
var _li = _element.parent();
// console.log(validatePane + " - " + isValid);
if (isValid) {
_li.removeClass('alert-danger');
_li.addClass('alert-success');
} else {
_li.removeClass('alert-success');
_li.addClass('alert-danger');
}
}; // end function validateTab
我正在听引导 'hidden.bs.tab' 事件,并调用该函数。
// Validate Tab on tab switch.
$(document).on('hidden.bs.tab', 'a[data-toggle="tab"]', function(e) {
validateTab(e.currentTarget);
});
预期上述作品,但我想的形式也提交时要做到这一点。我添加了一个简单的循环来获取每个选项卡,并打电话的jQuery validateTab()在invalidHandler()验证
invalidHandler: function(event, validator) {
console.log('invalid form');
$('#myForm').append(
'<div class="alert alert-danger alert-dismissable">' +
'<button type="button" class="close" data-dismiss="alert" aria-hidden="true">' +
'×' +
'</button>' +
'<strong>Error: </strong>' +
'<span>Please correct the problems and try again.</span>' +
'</div>'
);
// ADDED THIS CODE AND STARTED RUNNING INTO PROBLEMS.
var $tabs = $('#myTab li a');
$tabs.each(function(key, ele) {
// IF last Tab of form is Valid form submits regardless of other errors.
validateTab(ele);
});
}
这个作品有一个例外......当最后一个选项卡是有效的形式突然提出,即使有在其他选项卡上出现错误。它似乎调用有效覆盖任何以前的调用或在调用invalidHandler之前设置的任何内容。整个表格突然提交,就好像它已经被成功验证一样。
一个完整的例子可以在这里找到。 https://jsfiddle.net/qcean237/1/
当前没有对TAB 4进行验证,所以即使没有提供其他所需字段,每次都会提交表单。
我应该以不同的方式或在不同的地方验证选项卡来更新失败的提交上的选项卡外观?
感谢, 弥敦道
确切地说,它一直运行,直到在最后一个选项卡上调用valid()。当最后一个标签验证整个表单被认为是有效的。在invalidHandler()里面调用valid()会觉得很肮脏,但是到目前为止我已经想到了。 – Nathan
*“在invalidHandler()中调用'valid()''感觉脏'*〜这就是你的根本问题。 – Sparky