У меня есть форма, где есть несколько input, которые добавляются динамически из ajax-запроса, поэтому для них не срабатывает валидация на стороне клиента, заданная в модели (я пыталась найти хоть какую-то информацию о том, возможно ли добавить валидацию при формировании input, но так ничего и не нашла, если это как-то решается - отдельное огромное спасибо). Поэтому написала свой валидатор на jquery, все работает как надо, валидируется, но пропадает (именно пропадает, появляется на секунду и исчезает) сообщение об ошибке, хотя данные он не пропускает. Но если все остальные поля заполнены, то сообщение остается. И я просто не понимаю почему они исчезают, мне кажется, что я опробовала, наверное все уже.
$(document).ready(function(){
$('input[name="NewForm[experience]"]').change(function(){
var check = $(this).attr('id').slice(-1);
addExp(check);
});
$('body').on('focusout', '.require', function() {
var p = $(this).parent().children('p');
if ($(this).val()=='') {
$(this).closest('.form-group').addClass('has-error');
$(this).attr('aria-invalid', true);
p.text('Поле обязательно');
p.addClass('help-block help-block-error ');
} else {
d = new Date();
var invalid = ($(this).attr('placeholder')=='2006') ? ($.isNumeric($(this).val())&&(parseInt($(this).val())>1899)&&(parseInt($(this).val())<=d.getFullYear())) : ($(this).val().search('\[А-Яа-яЁё]+$') == 0);
if (invalid) {
console.log(1);
$(this).closest('.form-group').removeClass('has-error');
$(this).attr('aria-invalid', false);
p.text('');
p.removeClass('help-block help-block-error ');
} else {
$(this).closest('.form-group').addClass('has-error');
$(this).attr('aria-invalid', true);
p.text('Поле заполнено неправильно');
p.addClass('help-block help-block-error ');
}
}
});
$('#new').on('submit', function() {
if ($('.require').length>0) {
var thisInvalid = false;
$.each($('.require'), function() {
$(this).focusout();
if ($(this).attr('aria-invalid')=='true') thisInvalid = true;
});
if (thisInvalid) return false;
};
});
});
function addExp (add) {
if (add == 1) {
$child = $("#exp").children();
id = ($child.length != 0) ? parseInt($child.last().attr('id').slice(-1))+1 : 1;
$.ajax({
type: "POST",
url: "http://yii2/web/index.php?r=site%2Fexp",
data: {
'add' : add,
'id' : id,
},
success: function (res) {
$(res).appendTo('#exp') ;
$('#add').addClass('is_visible');
},
error: function () {
$('error').appendTo('#exp');
}
})} else {
$('#exp').empty();
$('#add').removeClass('is_visible');
}
}