我们有一个验证器,用于检查输入并选择如下所示加载:
$('form')
.on('keyup', 'input[required], input.optional, select.required', validator.checkField)
.on('change', 'select.required', validator.checkField);
表单是一个多部分表单,因此有一个下一个按钮,只有在当前显示中的所有字段(称为字段集)都经过验证时才能启用。
一旦输入被验证,它就会为div添加一个“好”类。这是有效的,并且在输入的任何键盘上或对有效的选择进行更改时,优良类将被添加到包含的div中。
正在发生的奇怪事情是,对于所有选择,您必须在功能启用之前更改选择两次,启用下一个按钮可识别所有必需字段已经过验证。
我们认为这是因为当前集合中包含“好”类的div数量的计数器在完成添加到dom之前就会触发。有什么建议吗?
function enabler(input) {
console.log("number of good classes required: "+input);
//for testing:
//alert(input);
var v = this.value;
var good;
good = $("#f"+curFieldSet).find('.good');
console.log("number of good classes found: "+good.length);
if (good.length >= parseInt(input)){
$('.next').prop('disabled', false);
} else {
$('.next').prop('disabled', true);
}
}
enabler(4);
$(document).ready(function(){
$('input[required]').not('.unused').keyup(function(){
setTimeout(enabler(fieldSetNumber),500);
}).change();
$('select.required').not('.unsed').change(function(){
setTimeout(enabler(fieldSetNumber),1000);
if($(this).attr('id')=='account-type'){
$('.section').hide();
$('#' + $(this).val()).show();
}
}).change();
});