В фокусе ввода я хочу проверить, не имеет ли класс msg класса err с ним, а затем что-то делать. Я попробовал его со следующим кодом, но if-statement всегда возвращает true.
JQuery
$('form .field input').on('focus blur', function(e){
if($(this).parent().find('.msg').parent().not(':has(.err)')) {
$(this).parent().find('.msg').parent().stop()[e.type === 'focus' ? 'slideDown' : 'slideUp']();
}
})
Затем я хочу также проверить каждый класс msg, который также имеет класс err. И если есть только 1, я хочу выбрать вход в родительском.
Это моя попытка, но это не сработало.
if($('.msg').parent('.field').has('.err').length === 1) {
$(this).parents().find('input').select();
}
HTML
<div class="field">
<input type="text">
<div>
<div class="msg">Msg.</div>
</div>
</div>
<div class="field">
<input type="text">
<div>
<div class="msg err">Err msg.</div>
</div>
</div>
.not()
не возвращает логическое значение типа .is()
. Это противоположность .filter()
. Возвращенная коллекция всегда оценивается как правдивая.
if ($(this).parent().find('.msg').parent().not(':has(.err)')) {
должно быть:
if (!$(this).parent().find('.msg').parent().is(':has(.err)')) {
// ^ not ^^ returns boolean
Использовать hasClass
$('form .field input').on('focus blur', function(e){
if(!$(this).parent().find('.msg').parent().hasClass('err')) {
$(this).parent().find('.msg').parent().stop()[e.type === 'focus' ? 'slideDown' : 'slideUp']();
}
})
if($('.msg').parent('.field').hasClass('err')) {
$(this).parents().find('input').select();
}